【问题标题】:redirecting popen output to file in python将popen输出重定向到python中的文件
【发布时间】:2015-11-19 07:08:32
【问题描述】:

我已经看到很多stdout=file 将重定向到文件的答案。但我有几个疑问。

  1. 为什么>file 不起作用。

    subprocess.Popen([SCRIPT, "R", ">", FILE, "2>", "/dev/null"])
    
  2. 这样好吗

    with open(FILE,'w+') as f:
        subprocess.Popen([SCRIPT, stdout=f]
        f.close()
    

在我的情况下,我试图在无限循环中运行一个脚本(它不会停止),并且还有一些其他进程正在监视它的输出。

即使在 f 关闭后,脚本是否还会继续写入它。如果是,它是如何工作的?

【问题讨论】:

    标签: python pipe ipc popen


    【解决方案1】:

    因为subprocess 不允许使用> 从文档中重定向输出或错误消息:

    stdinstdoutstderr分别指定执行程序的标准输入、标准输出和标准错误文件句柄。有效值为PIPEDEVNULL、现有文件描述符(正整数)、现有文件对象和None

    PIPE 表示应该创建一个到子节点的新管道。 DEVNULL 表示将使用特殊文件os.devnull。使用默认设置None,不会发生重定向;子文件句柄将从父文件继承。

    另外,stderr 可以是STDOUT,这表明来自应用程序的标准错误数据应该被捕获到与stdout. 相同的文件句柄中


    您应该使用以下代码:

    with open(FILE, 'w+') as f:
        subprocess.Popen([SCRIPT, 'R'],  stdout=f, stderr=subprocess.DEVNULL))
    

    因为你使用的是with,所以不需要关闭文件。

    【讨论】:

      【解决方案2】:

      我认为你必须尝试,

      with open(FILE,'w+') as f:
          subprocess.Popen([SCRIPT, stdout=f, stderr=f])
      

      【讨论】:

      • 您不需要关闭文件,它应该自动完成
      猜你喜欢
      • 1970-01-01
      • 2013-10-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 2020-02-06
      • 2018-01-11
      • 2018-12-13
      相关资源
      最近更新 更多