在Python 3.6中使用asyncio执行终端命令时出错

时间:2018-07-12 05:34:28

标签: python-3.6 python-asyncio

我第一次使用asyncio,并且遇到了两个错误: 1)RuntimeError:set_wakeup_fd仅在主线程中有效 2)RuntimeError:无法添加子处理程序,子监视程序没有附加循环

使用场景: 我必须执行两个终端命令,一个接着另一个。为了确保第二条命令仅在第一条命令之后执行,我使用asyncio设置循环并运行它们。 我试图最终使用flask API在此python文件中执行功能。 是否有人遇到这些错误并可以指导我解决该错误? 任何帮助都会很棒!
代码:

async def segmentVide(command):
process = await asyncio.create_subprocess_shell(
    command,
    stdout=asyncio.subprocess.PIPE)
stdout, stderr = await process.communicate()
asyncio.get_child_watcher()
return stdout.decode().strip() 

def segmentOutput(folderCreated):
    #command = MP4Box terminal command
    loop = asyncio.new_event_loop()
    asyncio.get_child_watcher().attach_loop(loop)
    asyncio.set_event_loop(loop)
    coro = loop.run_in_executor(None, segmentVide, command)
    loop.run_until_complete(coro)
    loop.close()
    print('completed')

还有另一个函数可以执行另一个终端命令,但异步用法部分也相同。

0 个答案:

没有答案