我希望这是一个简单的python问题.
当我在python解释器中尝试以下内容时:
>>> import process >>> def test(cmd): ... p = subprocess.Popen(cmd) ... >>> test(['ls', '-l'])
它将运行ls -l
,但我需要点击"返回"以获得新的>>>提示.
但是,当我尝试以下内容时:
>>> import process >>> def test(cmd): ... p = subprocess.Popen(cmd) ... p.wait() ... >>> test(['ls', '-l'])
然后ls -l
将立即运行>>>提示符运行.
另一个变种:
>>> import process >>> def test(cmd): ... p = subprocess.Popen(cmd, stdout=subprocess.PIPE) ... >>> test(['ls', '-l'])
这将立即给我一个新的提示.
最后一个例子最接近我想要的.我的目标是启动一个子进程,等待它完成,然后通过引用在我的父进程中使用它的stdout,p.stdout
同时让stderr只是打印到任何地方.
现在在我的实际应用程序中,最后一个版本只挂起:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
有或没有p.wait()
.
谢谢,
查理
在第一个变体中,test()
在启动进程后立即返回,但在将其输出发送到控制台之前.
如果你看一下你的输出做弹出提示,立即输出之前ls
.
>>> test(['ls', '-l']) >>> total 0 <----- test() returns, new propmpt --rw-r--r-- 1 foo bar 7 Mar 24 17:38 etc etc
在第二个变体中,test()
等待进程在返回之前终止.
在第三个版本中,您可能必须从子进程中读取stdout
它才能继续.
我可能已回答了我自己的问题.我相信在最后一种情况下,我需要明确地从p.stdout读取,以便我的进程继续.
即:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE) output = p.stdout.readlines() ....
谢谢大家