Tests make use of [[https://docs.python.org/3/library/timeit.html|timeit]] to ensure we are only measuring ''print()'' and ''write()''. ((//Not// the overhead of loading data into memory)) import timeit import sys setup = """ from sys import stdin num_lines = int(input()) lines = stdin.readlines() def myFun(stuff): for line in stuff: print(line) """ print(timeit.timeit("myFun(lines)", number=5, setup=setup), file=sys.stderr) import timeit import sys setup = """ from sys import stdin, stdout num_lines = int(input()) lines = stdin.readlines() def myFun(stuff): for line in stuff: stdout.write(line) """ print(timeit.timeit("myFun(lines)",number=5,setup=setup), file=sys.stderr) from sys import argv from random import * from string import * for i in range(int(argv[1])): print(''.join(choice(ascii_lowercase + ' ') for _ in range(int(argv[2])))) ((''python3 read_test.py lines length > out.txt'', where ''lines'' is the number of lines and ''length'' is the number of characters per line.))