Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python trio.open_进程和trio.run_进程给出属性错误_Python_Attributeerror_Python Trio - Fatal编程技术网

Python trio.open_进程和trio.run_进程给出属性错误

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/

我试图创建一个异步子进程并将一个变量传递给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/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之类的异步库集成,因为否则这两个库会在谁应该控制线程的问题上发生争执。这是一个大话题,不是评论中可以涵盖的内容:-)。也许来我们聊天,或者问一个新问题?