python 执行命令并获取实时返回

python subprocess模块可以通过子进程的方法运行系统命令,并获取 stdout 输出。但在默认情况下必须子进程执行完毕后才会获取输出,有没有办法实时获取到进程输出?

默认情况下python会检测输出设备,如果不是交互式terminal,则使用python自己的输出缓存,直到执行完毕后一起反给你。

PYTHONUNBUFFERED=1 环境变量能关掉这个机制。

1
2
3
4
5
6
7
8
9
10
11
12
import os
import subprocess

env = os.environ.copy()
env['PYTHONUNBUFFERED'] = '1'

cmd = ['ping', '1.1.1.1', '-c4']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)

for line in iter(proc.stdout.readline, b''):
print(line.rstrip().decode('utf-8'))

如果只是执行系统命令,可以用 sh

1
2
3
4
5
from sh import tail

for line in tail("-f", "info.log", _iter=True):
if "ERROR" in line:
send_an_email_to_support(line)

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2021 ret flag
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信