选择性地使python输出静音

时间:2019-05-10 18:40:49

标签: python python-3.x

我写了一个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,那也将被抑制。

重定向标准输出似乎更干净,除了以下事实:如果脚本正在写入常规文件,我会将标准输出重定向到标准输出。

0 个答案:

没有答案