使用subprocess.Popen()
,我正在启动一个应该花费很长时间的过程。但是,该进程有可能在启动后不久失败(生成返回代码1
)。如果发生这种情况,我想拦截失败并向用户提供解释性消息。有没有办法“监听”流程并在流程失败时做出响应?我不能只使用Popen.wait()
,因为我的python程序必须继续运行。
我现在所使用的黑客是time.sleep()
我的python程序.5秒(这应该足够让子进程失败,如果它会这样做)。 python程序恢复后,它会轮询子进程以确定它是否已经失败。
我认为更好的解决方案可能会使用线程和Popen.wait()
,但我是python的初学者。
编辑: 子进程是我正在启动的Java守护进程。如果守护程序的另一个实例已在系统上运行,则Java子进程将以返回码1退出,并且我想拦截凌乱的Java异常堆栈跟踪并向用户提供可理解的错误消息。
答案 0 :(得分:1)
两种方法:
Popen.wait()
,如果退出代码非零,则调用错误处理函数。确保错误处理程序是线程安全的,最好是在应用程序有事件循环时将错误消息分派给主线程。