我正在使用以下命令运行shell命令(创建子进程):
cmd = "ls"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
然后,我想在它完成后得到它的返回码。我应该用wait()
还是poll()
?在我看来wait()
等于一个poll()
包含在一个繁忙的等待中。类似于:
while process.poll() == None:
time.sleep(0.5)
我读到如果stdout/stderr
缓冲区被填满,wait()
可能会产生死锁。process.poll()
像上面那样使用也会产生死锁?如果这是真的,
我应该用process.comunicate()
来解决这个问题?现在,我只使用
process.comunicate()
当我对子流程感兴趣时stdout/stderr
。
提前谢谢。
是的。^{} 在这样的循环中使用时,如果} 和^{} 都不会死锁。^{} 将在死锁发生的情况下解决它。但是,如果您只想运行一个命令,检查它的返回代码,并获得它的输出,请使用^{} ,它包装了所有这些内容。
stdout
通过管道传输到您的进程中而您没有从中读取,则会导致死锁。如果不使用管道stdout
,或者一直在读取,那么^{相关问题 更多 >
编程相关推荐