python stdout stderr 一起输出_同时监视子进程的stdout和stderr

如何同时监视长时间运行的子进程的标准输出和标准错误,并在子进程生成每一行时立即对其进行处理?在

我不介意使用Python3.6的异步工具在两个流中的每一个上实现我所期望的无阻塞异步循环,但这似乎并不能解决问题。以下代码:import asyncio

from asyncio.subprocess import PIPE

from datetime import datetime

async def run(cmd):

p = await asyncio.create_subprocess_shell(cmd, stdout=PIPE, stderr=PIPE)

async for f in p.stdout:

print(datetime.now(), f.decode().strip())

async for f in p.stderr:

print(datetime.now(), "E:", f.decode().strip())

if __name__ == '__main__':

loop = asyncio.get_event_loop()

loop.run_until_complete(run('''

echo "Out 1";

sleep 1;

echo "Err 1" >&2;

sleep 1;

echo "Out 2"

'''))

loop.close()

输出:

^{pr2}$

我希望它能输出类似于:2018-06-18 00:06:35.766948 Out 1

2018-06-18 00:06:36.770882 E: Err 1

2018-06-18 00:06:37.770187 Out 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值