Нет, вам не нужно создавать отдельную функцию печати.В Python 2.6 у вас есть такой синтаксис:
# suppose f is an open file
print >> f, "hello"
# now sys.stdout is file too
print >> sys.stdout, "hello"
В Python 3.x:
print("hello", file=f)
# or
print("hello", file=sys.stdout)
Так что вам действительно не нужно различать файлы и стандартный вывод.Они одинаковы.
Игрушечный пример, который выводит "привет" так, как вы хотите:
#!/usr/bin/env python3
import sys
def produce_output(fobj):
print("hello", file=fobj)
# this can also be
# fobj.write("hello\n")
if __name__=="__main__":
if len(sys.argv) > 2:
print("Too many arguments", file=sys.stderr)
exit(1)
f = open(argv[1], "a") if len(argv)==2 else sys.stdout
produce_output(f)
Обратите внимание, что процедура печати абстрагируется от того, работает ли она с stdout илифайл.