问题:如何获取班级
asyncio.subprocess.Process
的实例?
为了替换对subprocess.Popen
实例的方法的同步和阻塞调用,我想使用asyncio.subprocess.Process
的实例。
asyncio
asyncio.create_subprocess_exec
声称这是由函数subprocess.Popen
完成的,其参数与asyncio.create_subprocess_exec
的构造函数的参数大致相同。特别是,文档声称subprocess.Popen
将:
返回一个流程实例。
然而,根据我的经验,这不是真的。与asyncio.subprocess.Process
类的实例类似,根据其文档,pid
类的实例应具有stderr
和communicate
等属性以及import asyncio, subprocess
loop = asyncio.get_event_loop()
args = ['/bin/sh', '-cmd', "echo '$MONEY'"]
async def test2(args):
proc = await asyncio.create_subprocess_exec(args,
stdin=asyncio.subprocess.PIPE,
stdout=asyncio.subprocess.PIPE,
stderr=subprocess.PIPE)
return proc
proc = test2(args)
print(proc)
type(proc)
等方法
这是一个完整的最小工作示例:
proc
这些都表明Process
是一个协程。我想要一个<button>Delete this comment</button>
类的实例。
答案 0 :(得分:1)
我只是想通了;我在这里发布我的MWE,以防将来帮助任何人,因为我花了几个小时才弄明白。 this tutorial中的MWE示例以及评论中的建议都很有帮助。
import asyncio, subprocess
loop = asyncio.get_event_loop()
args = '/bin/sh'
async def test2(args):
proc = await asyncio.create_subprocess_exec(args,
stdin=asyncio.subprocess.PIPE,
stdout=asyncio.subprocess.PIPE,
stderr=subprocess.PIPE)
return proc
try:
proc = loop.run_until_complete(test2(args))
finally:
loop.close()
# Check that it worked
print(proc)
type(proc)