作者:双豆儿_668 | 来源:互联网 | 2023-10-11 17:46
这个问题与我最近在此提出的其他问题(python: fork without an external command,and capturing stdout and stderr separately)类似,除了这个问题与asyncio
世界有关。
asyncio.create_subprocess_{shell,exec}
函数提供了一种方便的方式来在子进程中运行可执行文件,并通过启用异步的管道与其可执行文件stdin
,stdout
和stderr
进行交互。我正在寻找一个类似的过程,该过程将在子进程中运行任意功能,并为其stdin
,stdout
和stderr
提供相同的启用异步功能的管道。例如,假设此假设函数称为asyncio.create_subprocess_lambda
。我希望它或多或少如下地工作:
def myfunc(*args,**kwargs):
# does arbitrary things with stdin,stdout,and stderr.
return 0
async def run():
proc = await asyncio.create_subprocess_lambda(
lambda : myfunc('a','b',c='d'),stdout=asyncio.subprocess.PIPE,stderr=asyncio.subprocess.PIPE)
stdout,stderr = await proc.communicate()
print(f'[lambda exited with {proc.returncode}]')
if stdout:
print(f'[stdout]\n{stdout.decode()}')
if stderr:
print(f'[stderr]\n{stderr.decode()}')
这将导致分叉发生,而myfunc
函数作为子级运行,并且其stdout
和stderr
输出可通过异步管道在父级中访问。
我知道这种功能目前尚不存在,但是我希望可以使用其他asyncio
方法,以使我能够以最少的复杂,复杂的代码来实现此功能。
预先感谢您的任何建议。