Popen.poll()和Popen.wait()之间的区别

2024-09-27 07:26:40 发布

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

我正在使用以下命令运行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

提前谢谢。


Tags: 命令cmdtrue进程stderrstdoutshellprocess
1条回答
网友
1楼 · 发布于 2024-09-27 07:26:40

是的。^{}在这样的循环中使用时,如果stdout通过管道传输到您的进程中而您没有从中读取,则会导致死锁。如果不使用管道stdout,或者一直在读取,那么^{}^{}都不会死锁。^{}将在死锁发生的情况下解决它。但是,如果您只想运行一个命令,检查它的返回代码,并获得它的输出,请使用^{},它包装了所有这些内容。

相关问题 更多 >

    热门问题