当我创建一个使用文件流作为stderr(或stdout) 的 python 子进程时,相应的字段是None:
s = subprocess.Popen(['ls','qwer'],
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=open("zzzzz",'wb'))
s.stderr is None
==> True
Run Code Online (Sandbox Code Playgroud)
(我期望s.stderr是文件流)。
是的,这是故意的。//当你向构造函数stdout提供kwargs时stdinstderrPopen kwargs 时,您就是在告诉它在子进程中将这些管道定向到何处:
\n\n\nstdin、stdout 和 stderr 分别指定执行的程序\xe2\x80\x99s 标准输入、标准输出和标准错误文件句柄。
\n
但stdout//对象上的属性stdin在使用时被记录为仅具有值stderrPopenPIPE:
\n\n\n波彭标准输入
\n\n如果 stdin 参数是 PIPE,则此属性是一个向子进程提供输入的文件对象。否则,它就是“无”。
\n\nPopen.stdout
\n\n如果 stdout 参数是 PIPE,则此属性是提供子进程输出的文件对象。否则,它就是“无”。
\n\nPopen.stderr
\n\n如果 stderr 参数是 PIPE,则此属性是一个文件对象,提供子进程的错误输出。否则,\n None。
\n
至于为什么Popen.std*是None当你传递除PIPE,我不确定。也许是因为它被认为是多余的,因为您必须首先将打开的句柄传递给构造函数?
| 归档时间: |
|
| 查看次数: |
3502 次 |
| 最近记录: |