我的应用程序使用多个外部二进制文件,这些二进制文件是使用
subprocess.Popen
通过新子进程调用的。我将 stdout/stderr 写入文件并检索退出代码以确定执行是否成功。解析标准输出以检索所需的结果。这些调用可能会运行几分钟到几小时,并且应用程序会并行涉及许多此类调用。
这种方法是有效的,尽管我遇到了一些奇怪的问题,子进程由于从某处收到 SIGTERM 信号而随机崩溃或退出。由于我从这些子进程中获得的信息很少,因此在调试这些问题时遇到了很多麻烦。即使退出代码也并不总是有帮助,因为某些应用程序在突然终止后返回 0。
是否有更好的方法来管理子流程并获取更多有关子流程的诊断信息?我在想可能有一个库可以实现这一点,或者我可能会缺少一些关于标准
subprocess
库的选项,尽管我真的找不到任何东西。
或者,如果这是不可能的,那么在没有 API 的情况下处理外部程序执行的最佳方法是什么?有没有方便调试的方法?