带有管道标准输出的Popen在按Enter键之前不会退出

2024-05-17 06:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

当我用PIPE stdout启动Popen时,进程直到我按Enter(Windows操作系统,用多个pythonlxc版本测试)才会退出 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捕获所有输出时,也许我可以做一些与它类似的事情?你知道吗


Tags: pytest版本cmd进程过程windowsas
1条回答
网友
1楼 · 发布于 2024-05-17 06:25:01

如果您不想让进程与stdin(等待或响应该句柄上的输入的类别)交互,那么防止这种情况发生的最佳方法是不让它继承原始Python脚本的句柄(默认情况下,没有stdin参数传递给Popen)。你知道吗

有几种方法:

  • 添加参数stdin=subprocess.DEVNULL(在新版本的Python上)
  • 添加参数stdin=open('/dev/null')
  • 添加参数stdin=subprocess.PIPE,然后调用proc.stdin.close()proc.communicate('')(当然,仅当您只需要communicate()的其他效果时)。你知道吗

相关问题 更多 >