管道输出subprocess.Popen到文件

46 python subprocess stdout

我需要推出一批具有长期运行的进程subprocess.Popen,并希望有stdoutstderr从各自动管道分离日志文件.每个进程将同时运行几分钟,并且我希望在进程运行时将每个进程写入两个日志文件(stdoutstderr).

我需要不断地调用p.communicate(),以便更新每个日志文件上的每个进程在循环,或者是有一些方法来调用原有的Popen命令,以便stdoutstderr自动传输到打开的文件句柄?

Joh*_*ooy 74

您可以传递stdoutstderr作为参数Popen()

subprocess.Popen(self, args, bufsize=0, executable=None, stdin=None, stdout=None,
                 stderr=None, preexec_fn=None, close_fds=False, shell=False,
                 cwd=None, env=None, universal_newlines=False, startupinfo=None, 
                 creationflags=0)
Run Code Online (Sandbox Code Playgroud)

例如

>>> import subprocess
>>> with open("stdout.txt","wb") as out, open("stderr.txt","wb") as err:
...    subprocess.Popen("ls",stdout=out,stderr=err)
... 
<subprocess.Popen object at 0xa3519ec>
>>> 
Run Code Online (Sandbox Code Playgroud)

  • WOA!我不知道你可以在上下文管理器中链接`open`s.#mindblown (12认同)

Ale*_*lli 36

根据文档,

stdin,stdout和stderr分别指定执行程序的标准输入,标准输出和标准错误文件句柄.有效值为PIPE,现有文件描述符(正整数),现有文件对象和无.

所以刚才传了开来换写文件对象作为命名的参数stdout=stderr=你应该罚款!