stdout=None
意味着,stdout
进程中的 -handle 直接从父进程继承,简单来说,它基本上意味着,它被打印到控制台(同样适用于stderr
)。
然后您可以选择stderr=STDOUT
,这将重定向stderr
到stdout
,这意味着 和 的输出stdout
被stderr
转发到同一个文件句柄。
如果设置stdout=PIPE
,Python 会将数据从进程重定向到一个新的文件句柄,可以通过p.stdout
(p
beeingPopen
对象)访问该文件句柄。您将使用它来捕获进程的输出,或者用于stdin
将数据(不断)发送到stdin
. 但大多数情况下你想使用p.communicate
它,它允许你向进程发送一次数据(如果你需要的话)并返回完整的stderr
,stdout
如果进程完成了!
一个更有趣的事实是,您可以将任何传递file-object
给stdin/stderr/stdout
,例如,也可以传递一个用打开的文件open
(对象必须提供一种fileno()
方法)。
对你的wait
问题。这不应该是这样!作为解决方法,您可以使用它p.poll()
来检查进程是否退出!调用的返回值是wait
多少?
此外,您应该避免shell=True
将用户输入作为第一个参数传递,这可能会被恶意用户用来利用您的程序!它还启动了一个 shell 进程,这意味着额外的开销。当然,有 1% 的情况是您实际需要shell=True
的,我无法用您的简约示例来判断这一点。