我写了一个python脚本来处理一些数据。该脚本接受两个参数,一个用于输入文件,第二个用于输出文件。我想扩展以允许写入标准输出,以便可以将输出通过管道传输到其他进程。我的问题是,当前我还在处理过程中输出进度信息,因为这可能需要一些时间。理想情况下,如果脚本配置为输出到stdout,我只想抑制进度信息。优点之一是,所有实际输出在执行结束时立即发出,而在执行期间不会散布。
我看到它的方式有两个选择,我都尝试了(和工作)了这两个选择,但不确定它们是否是最pythonic的方式。在输出文件配置为stdout的处理过程中,我可以重载对print()
的调用,也可以将stdout重定向到/dev/null
。
重载print()
if args.output_file.name == '<stdout>':
def silent(*args, **kwargs):
return
global print
print = silent
重定向标准输出
if args.output_file.name == '<stdout>':
out = open('/dev/null', 'w')
else:
out = sys.stdout
with redirect_stdout(out):
data = process_data()
write_output(data, args.output_file)
重载print()
似乎是最少的Python语言,但至少只会影响对print()
的调用,而不会作为文件写入stdout。但是,如果我想print()
进行stderr,那也将被抑制。
重定向标准输出似乎更干净,除了以下事实:如果脚本正在写入常规文件,我会将标准输出重定向到标准输出。