【发布时间】:2018-06-05 17:34:35
【问题描述】:
在asyncio 模块中是否存在与subprocess 模块中的CalledProcessError 异常类似的情况?
我原以为会有一个模拟,因为asyncio 模块创建了TimeoutError 异常来替换subprocess 模块中的TimeoutExpired 异常。但是好像没有。
作为一个子问题:CalledProcessError 异常是否仅适用于 Popen 类的实例?或者它是否也适用于实现(子)进程功能的其他类(例如来自asyncio 的Process 或来自tornado.process 的Subprocess)?
似乎CalledProcessError 异常可能适用于与Popen 相似但不同的类的实例。例如,可以在 GitHub examples 上找到使用来自 tornado.process 的 Subprocess 类的实例调用 CalledProcessError 的人。
请注意,在上面的示例中,虽然 tornado.process 确实有 subprocess.CalledProcessError 的别名,但基于文件顶部的 import 语句,不是异常被调用;真的是subprocess.CalledProcessError被调用了。
如果CalledProcessError 也适用于来自asyncio 的Process 类的实例,那么为什么TimeoutExpired 不能也适用于来自asyncio 的Process 类的实例?换句话说,在asyncio 为什么有必要创建TimeoutExpired 异常的新版本(TimeoutError),但不是需要创建CalledProcessError 异常的新版本?
归根结底,the source code for CalledProcessError 并没有那么复杂,所以如果我想为来自asyncio 的Process 类的实例创建一个重复版本,我想我可能可以,但似乎最好先尽量避免这样的代码重复。
注意:我目前的工作心智模型是“asyncio.subprocess 模块旨在完成 subprocess 模块所做的所有事情,但异步”。如果这种心智模型不正确,那么这个问题很可能包含固有的成见/误解。
【问题讨论】:
-
asyncio不打算成为subprocess的替代品。你的基本前提是错误的。 -
@user2357112:但是有是
subprocess-like support in theasynciomodule,这就是我认为OP所指的。我认为 OP 意味着该支持应该是协同程序等待的等价物。 -
@MartijnPieters 是的,听起来你说的比我说的更正确。
标签: python asynchronous exception subprocess python-asyncio