如何解决交互式读取异步执行的子进程的输出时出现AssertionError-Python
我有一个脚本,需要花费大量时间来执行并产生大量输出。
因此,为了提高效率,我决定在到达stdout
时从subprocess
读取输出,然后对其进行处理。
在我阅读了许多有关该主题的文章之后,包括readline()
文档,该文档指出read()
对象的Subprocess
和async 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 举报,一经查实,本站将立刻删除。