当我用PIPE stdout启动Popen时,进程直到我按Enter
(Windows操作系统,用多个python
和lxc
版本测试)才会退出
e、 g.:
import subprocess as sp
cmd = ['lxc', 'exec', 'remote:container', '--', 'echo', '1']
with sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE) as proc:
while True:
print(proc.poll())
没有打印。。。(过程轮询()==None(当进程仍在运行时)并且当我按Enter
时,它立即退出。你知道吗
这个过程本身做它的工作,没有什么问题,只有这个存在的问题。它可能在我调用的实用程序(lxc
)的范围内,但是我能做些什么来调试它或者从python代码中绕过它呢?你知道吗
这个调用在py.test
运行期间被调用时有效,当py.test
捕获所有输出时,也许我可以做一些与它类似的事情?你知道吗
如果您不想让进程与stdin(等待或响应该句柄上的输入的类别)交互,那么防止这种情况发生的最佳方法是不让它继承原始Python脚本的句柄(默认情况下,没有
stdin
参数传递给Popen
)。你知道吗有几种方法:
stdin=subprocess.DEVNULL
(在新版本的Python上)stdin=open('/dev/null')
stdin=subprocess.PIPE
,然后调用proc.stdin.close()
或proc.communicate('')
(当然,仅当您只需要communicate()
的其他效果时)。你知道吗相关问题 更多 >
编程相关推荐