微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

交互式读取异步执行的子进程的输出时出现AssertionError-Python

如何解决交互式读取异步执行的子进程的输出时出现AssertionError-Python

我有一个脚本,需要花费大量时间来执行并产生大量输出
因此,为了提高效率,我决定在到达stdout时从subprocess读取输出,然后对其进行处理。

在我阅读了许多有关该主题文章之后,包括readline()文档,该文档指出read()对象的Subprocessasync def run(): LockFile.buf = bytes() cmd = ['/opt/confd/bin/maapi','--clicmd','--get-io','--no-hidden','show parser dump'] proc = await asyncio.create_subprocess_exec(*cmd,stdout=asyncio.subprocess.PIPE,stderr=asyncio.subprocess.PIPE) while True: try: data = await asyncio.wait_for(proc.stdout.readline(),timeout=10) if len(data) == 0: break LockFile.buf += bytes(LockFile.filter_commands(data.decode("utf-8")),"utf-8") except asyncio.TimeoutError: break print("here") stdout,stderr = proc.communicate() print(proc.returncode) return stdout,stderr,proc.returncode def main(): if len(sys.argv) > 1: print("Invalid usage,no arguments required") exit(-1) loop = asyncio.get_event_loop() out,err,rc = loop.run_until_complete(run()) print(rc) if (rc != 0): sys.stderr.write("Error: Failed dumping\n") sys.stderr.write(err.decode('utf-8','ignore')) return 方法可能会导致系统内部死锁已经完成以下实现。

AssertionError

问题是我在命令末尾得到了以下... write here <class 'AssertionError'> [<FrameSummary file /usr/share/cosm-cli/bin/cli-show-all-commands,line 384 in main>,<FrameSummary file /usr/lib/python3.5/asyncio/base_events.py,line 466 in run_until_complete>,<FrameSummary file /usr/lib/python3.5/asyncio/futures.py,line 293 in result>,<FrameSummary file/usr/lib/python3.5/asyncio/tasks.py,line 239 in _step>,<FrameSummary file /usr/share/cosm-cli/bin/cli-show-all-commands,line 364 in run>,<FrameSummary file /usr/lib/python3.5/asyncio /subprocess.py,line 182 in communicate>,line 381 in __iter__>] Aborted: {yield from wasn't used with future}

AssertionError

interpreter发生在proc.communicate()到达{{1}}行时, 我想这与上面写的问题(死锁)有关,但也许我弄错了。

有没有办法解决这个问题(或采取其他解决办法)?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。