交互式读取异步执行的子进程的输出时出现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 (将#修改为@)