Python asyncio和subprocess_exec():获取已退出进程的siginfo_t

时间:2017-06-20 19:14:20

标签: python unix asynchronous signals python-asyncio

因此,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

0 个答案:

没有答案