使用subprocess.Popen()
,我正在启动一个应该需要很长时间的过程。但是,该过程有可能在启动后不久失败(产生返回码1
)。如果发生这种情况,我想拦截失败并向用户显示解释性消息。有没有办法“倾听”该过程并在失败时做出响应?我不能只使用Popen.wait()
,因为我的 python 程序必须继续运行。
我现在的 hack 是time.sleep()
我的 python 程序 0.5 秒(如果它要这样做的话,这应该足够让子进程失败)。python程序恢复后,它会轮询子进程以确定它是否失败。
我想更好的解决方案可能会使用线程和Popen.wait()
,但我是 python 的相对初学者。
编辑:子进程是我正在启动的 Java 守护进程。如果该守护进程的另一个实例已经在系统上运行,Java 子进程将以返回码 1 退出,我想截取杂乱的 Java 异常堆栈跟踪并向用户显示可以理解的错误消息。