我试图编写一个Python脚本,让用户在stdin / stdout和文件之间切换输入/输出。但我不确定我的实施是否正确:
#!/usr/bin/python3
import fileinput
import sys
from contextlib import contextmanager
from contextlib import redirect_stdout
def foo(file):
return ''.join([line for line in file])
@contextmanager
def run(input_file, output_file):
stdin = '-' if input_file is None else input_file
stdout = sys.stdout if output_file is None else open(output_file, 'w')
with fileinput.input(stdin) as stdin, stdout:
with redirect_stdout(stdout):
print(foo(stdin))
答案 0 :(得分:1)
我认为你需要这样做。您不需要将run()
本身设为@contextmanager
- 它只需要使用一个(或更多,fileinput.input
和redirect_stdout
已经是{}}。我不确定你为什么使用fileinput.input
,因为似乎只涉及一个输入文件。
from contextlib import redirect_stdout
import fileinput
import sys
def foo(file):
return ''.join([line for line in file])
def run(input_file, output_file):
stdin = '-' if input_file is None else input_file
stdout = sys.stdout if output_file is None else open(output_file, 'w')
with fileinput.input(stdin) as stdin, redirect_stdout(stdout):
print(foo(stdin))
run('input.txt', 'output.txt')
run('input.txt', None)