2024-05-16 19:09:52 发布
网友
我正在尝试编写一个使用subprocess模块的小应用程序。
subprocess
我的程序调用一个外部Bash命令,这需要一些时间来处理。在此期间,我将向用户显示一系列如下消息:
Processing. Please wait... The output is foo()
如何使用Popen.wait()或Popen.poll()来完成此操作。我读到我需要使用Popen.returncode,但是我不知道如何让它主动检查状态。
Popen.wait()
Popen.poll()
Popen.returncode
@extraneon的回答有点倒退。如果进程完成,wait()和poll()都返回进程的退出代码。如果进程仍在运行,poll()方法将返回None,并且wait()方法将阻塞,直到进程退出:
wait()
poll()
None
查看以下页面:https://docs.python.org/3.4/library/subprocess.html#popen-objects
Check if child process has terminated. Set and return returncode attribute.
Wait for child process to terminate. Set and return returncode attribute.
同时指定^{}(指定timeout)和^{}如果进程尚未完成,则返回None;如果进程已完成,则返回不同的结果(我认为是整数,退出代码,希望是0)。
timeout
编辑:
^{}和^{}有不同的行为:
wait
TimeoutExpired
poll
编辑
所以我觉得你应该做些什么:
while myprocess.poll() is None: print("Still working...") # sleep a while
请注意,如果bash脚本创建了大量输出,则必须使用communicate()或类似的方法来防止stdout或stderr被填满。
communicate()
@extraneon的回答有点倒退。如果进程完成,
wait()
和poll()
都返回进程的退出代码。如果进程仍在运行,poll()
方法将返回None
,并且wait()
方法将阻塞,直到进程退出:查看以下页面:https://docs.python.org/3.4/library/subprocess.html#popen-objects
Popen.poll()
Popen.wait()
同时指定^{} (指定} 如果进程尚未完成,则返回timeout
)和^{None
;如果进程已完成,则返回不同的结果(我认为是整数,退出代码,希望是0)。编辑:
^{} 和^{} 有不同的行为:
wait
(不带timeout参数)将阻塞并等待进程完成。timeout
秒,以便进程完成。如果它没有完成,它将抛出TimeoutExpired
异常。如果您捕捉到异常,那么欢迎继续,或者再次wait
。poll
总是立即返回。它有效地执行超时为0的等待,捕获任何异常,并在进程尚未完成时返回None
。wait
或poll
时,如果进程已经完成,则将设置popen对象的^{wait
或poll
一样轻松地检查它,并且函数的返回值也将是进程的返回代码。编辑
所以我觉得你应该做些什么:
请注意,如果bash脚本创建了大量输出,则必须使用
communicate()
或类似的方法来防止stdout或stderr被填满。相关问题 更多 >
编程相关推荐