gpt4 book ai didi

python - Popen.poll() 和 Popen.wait() 的区别

转载 作者:太空狗 更新时间:2023-10-29 21:53:23 28 4
gpt4 key购买 nike

我正在使用以下命令来运行 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 感兴趣时。

提前致谢。

最佳答案

是的。 subprocess.poll ,当在这样的循环中使用时,如果 stdout 通过管道传输到您的进程中而您没有从中读取,则会导致死锁。如果您不使用管道传输 stdout 或者您一直从中读取,poll 都不会也不wait会死锁。 subprocess.communicate将在可能发生的情况下解决僵局。但是,如果您只想运行命令、检查其返回码并获取其输出,请使用 subprocess.check_output ,它包含了所有这些内容。

关于python - Popen.poll() 和 Popen.wait() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13832734/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com