当试图使用subprocess.Popen运行一个exe文件时,Python代码终止了。

0 人关注

I'm trying to run this exe:

s = subprocess.Popen('make.exe -console -verbose', stderr=subprocess.PIPE, stdin=subprocess.PIPE)

虽然我可以在这里使用subprocess.run,但我需要在'Unblock'模式下运行它,因为我有其他部分的代码要同时执行。

(PS: 用subprocess.run可以正常工作,但在这种情况下,代码的其余部分不会进一步移动)

python
subprocess
pipe
executable
popen
Alison
Alison
发布于 2020-03-31
1 个回答
FiddleStix
FiddleStix
发布于 2020-03-31
已采纳
0 人赞同

对Popen的调用是 "非阻塞的"。 换句话说,子进程被创建,Popen立即返回。 如果你想对子进程做一些事情(比如读取输出或简单地等待它完成),那么你可以使用一个来自 docs ,如wait()或communication()。

如果你乐于只等待子进程的结束,可以使用wait(),并选择一个超时值。

# create the sub process
s = subprocess.Popen('make.exe -console -verbose', stderr=subprocess.PIPE, stdin=subprocess.PIPE)
for _ in range(6):
        # wait for 10 seconds
        s.wait(10)
    except TimeoutExpired:
        print("Waited 10 seconds, process still not done")