use*_*312 21 python subprocess
我正在尝试编写一个使用该subprocess模块的小应用程序.
我的程序调用外部Bash命令,需要一些时间来处理.在此期间,我想向用户展示一系列这样的消息:
处理.请稍等...
输出为foo()
我怎么能用Popen.wait()或者这样做呢Popen.poll().我已经读过我需要使用的Popen.returncode,但我怎么能得到它来主动检查状态,我不知道.
onl*_*one 28
@ extraneon的回答有点倒退.无论wait()与poll()该过程是否已结束返回进程的退出代码.如果进程仍在运行,则该poll()方法将返回None,并且该wait()方法将阻塞,直到进程退出:
请查看以下页面:https://docs.python.org/3.4/library/subprocess.html#popen-objects
Popen.poll()
检查子进程是否已终止.设置并返回returncode属性.
Popen.wait()
等待子进程终止.设置并返回returncode属性.
ext*_*eon 27
两者wait()(有timeout指定的)并且如果进程尚未完成则返回,并且如果进程已经完成则poll()返回None一些不同的东西(我认为整数,退出代码,希望为0).
编辑:
wait (没有超时参数)将阻塞并等待进程完成.wait使用timeout参数将等待timeout进程完成的秒数.如果它没有完成,它将抛出TimeoutExpired异常.如果您发现异常,那么欢迎您继续,或者wait再次访问.poll总是马上回来.它有效地等待超时为0,捕获任何异常,并None在进程尚未完成时返回.wait或者poll,如果该进程已经完成,POPEN对象returncode将被设置(否则就没有-你可以作为很容易地检查作为主叫wait或poll),并从函数的返回值也将是过程的返回码.</编辑>
所以我觉得你应该这样做:
while myprocess.poll() is None:
print("Still working...")
# sleep a while
Run Code Online (Sandbox Code Playgroud)
请注意,如果bash脚本创建了大量输出,则必须使用communicate()或类似的东西来防止stdout或stderr被填充.
| 归档时间: |
|
| 查看次数: |
51983 次 |
| 最近记录: |