在asyncio
模块中,是否有与CalledProcessError
模块中的subprocess
异常类似的东西?
我本来希望有一个模拟,因为asyncio
模块创建了TimeoutError
异常以替换TimeoutExpired
模块中的subprocess
异常。但是似乎没有一个。
作为一个子问题:CalledProcessError
异常仅适用于Popen
类的实例吗?还是与实现(子)流程功能的其他类(例如,来自Process
的asyncio
或来自Subprocess
的tornado.process
)一起使用?
在某些情况下,CalledProcessError
异常可能与类似但与Popen
不同的类的实例一起工作。例如,可以在GitHub examples上找到使用CalledProcessError
中的Subprocess
类实例调用tornado.process
的人。
请注意,在上面的示例中,虽然tornado.process
确实具有subprocess.CalledProcessError
的别名,但基于文件顶部的import
语句(不是被调用的异常);确实是subprocess.CalledProcessError
被调用。
如果CalledProcessError
也可以与Process
中的asyncio
类的实例一起使用,那么TimeoutExpired
为什么也不能与Process
中的asyncio
类的实例一起使用?换句话说,为什么在asyncio
中必须创建TimeoutError
异常的新版本(TimeoutExpired
),而不必创建CalledProcessError
异常的新版本?
归根结底,the source code for CalledProcessError
并没有那么复杂,所以如果我想为Process
中的asyncio
类的实例创建一个重复的版本,我想我可能可以,但是首先看来是可取的尝试避免这种代码重复。
注意:我当前正在使用的思维模型是“ asyncio.subprocess
模块旨在以异步方式完成subprocess
模块所做的所有工作”。在某种程度上,这种思维模式是不正确的,这个问题很可能包含固有的先入之见/误解。
最佳答案
asyncio
不包含CalledProcessError
的任何等效项,因为它不包含引发CalledProcessError
的所有等效项。 check_call
,check_output
,check_returncode
或check
的run
参数没有等效项。