因此,Python asyncio
模块提供了一种使用subprocess_exec
与实时进程的输入/输出流异步交互的好方法。通常,这是通过设置继承自asyncio.SubprocessProtocol
的子类并编写以下方法来完成的:
def connection_made(self, transport):
...
def pipe_data_received(self, fd, data):
...
def process_exited(self):
...
当进程退出时,将调用最后一个方法process_exited
。在这里,您可以通过return_code()
对象的transport
方法获取返回码。但是,我希望能够获得有关异常退出流程的更具体信息。我希望能够通过siginfo_t
对象提供的信息,UNIX / Linux / POSIX平台通过waitid()/waitpid()
系列函数提供这些对象。 siginfo_t
结构提供了许多有关进程退出原因的有用信息,例如它是否被信号(分段错误/中止等)和其他信息杀死。
我尝试使用os
模块中的Python包装器来调用os.waitid(...)
回调中的process_exited
,但它引发了ChildProcessError
异常,大概是因为到时{调用{1}},子进程已退出,因此process_exited
将无效。
那么os.waitpid()
工作流有没有办法从退出的子进程中检索asyncio.SubprocessProtocol
?