Python trio.open_进程和trio.run_进程给出属性错误
我试图创建一个异步子进程并将一个变量传递给stdin,但是trio.run\u进程和trio.open\u进程都给出了一个属性错误。它没有指定导致错误的原因Python trio.open_进程和trio.run_进程给出属性错误,python,attributeerror,python-trio,Python,Attributeerror,Python Trio,我试图创建一个异步子进程并将一个变量传递给stdin,但是trio.run\u进程和trio.open\u进程都给出了一个属性错误。它没有指定导致错误的原因 Traceback (most recent call last): File "./update.py", line 122, in pkgUpdates trio.run(self.asetup, password) File "/home/user/.local/lib/python3.7/site-packages/
Traceback (most recent call last):
File "./update.py", line 122, in pkgUpdates
trio.run(self.asetup, password)
File "/home/user/.local/lib/python3.7/site-packages/trio/_core/_run.py", line 1444, in run
raise runner.main_task_outcome.error
File "./update.py", line 65, in asetup
nursery.start_soon(self.upProc, password, 'update')
File "/home/user/.local/lib/python3.7/site-packages/trio/_core/_run.py", line 506, in __aexit__
raise combined_error_from_nursery
File "./update.py", line 75, in upProc
await trio.open_process(['sudo', '-S', 'apt-get', cmd, '-y'],
File "/home/user/.local/lib/python3.7/site-packages/trio/_deprecate.py", line 125, in __getattr__
raise AttributeError(name)
AttributeError: open_process
我还尝试将trio.Process与stdin=io.BytesIO(密码)
一起使用,但这会导致io.UnsupportedOperation错误。仅传递字节也会产生错误
功能是:
async def upProc(self, password, cmd):
await trio.open_process(['sudo', '-S', 'apt-get', cmd, '-y'],
stdin=password.encode(), capture_stdout=True)
if (cmd == 'update'):
await self.upProc(password, 'upgrade')
return
您在
open\u进程
和run\u进程
上获得AttributeError的原因是它们只添加到Trio v0.12.0中,您可能正在使用v0.11.0。这不是你的错——大约20分钟前我才发布了v0.12.0:-)。但我猜你在看开发版本的文档,这让你很扫兴
假设您可以升级到v0.12.0,我认为您需要:
await trio.run_process(['sudo', '-S', 'apt-get', cmd, '-y'], stdin=password_bytes)
这将启动流程,等待其完成,然后返回有关流程的一些信息,所有这些信息都集中在一个快照中。谢谢!这些函数现在正在工作,但它正在阻塞线程,我需要让gui保持响应。open_进程永远挂起,process.stdout.receive_some()无限期地阻塞线程。也许我在文档中遗漏了什么?你用什么做gui?通常,您必须使用特殊的技巧来将gui库与trio之类的异步库集成,因为否则这两个库会在谁应该控制线程的问题上发生争执。这是一个大话题,不是评论中可以涵盖的内容:-)。也许来我们聊天,或者问一个新问题?