问题描述
我有一个脚本,需要花费大量时间来执行并产生大量输出。
因此,为了提高效率,我决定在到达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 (将#修改为@)