我正在尝试使用子进程在 python 中解析 sar 结果,每次我调用调用 sar 子进程的 python 代码时,它都会产生不同数量的行。这是重现此问题的最小程序:
import sys
import subprocess
fn = sys.argv[1]
p = subprocess.Popen(str('sar -r -f %s' % fn).split(' '), shell=True, stdout=subprocess.PIPE)
count = 0
while p.poll() is None:
output = p.stdout.readline()
count += 1
print "num lines = %d" % count
多次调用这个程序,每次产生不同数量的行:像这样
for i in {1..10}; do ./sarextractor.py /var/log/sysstat/sa02; done
直接在命令行上调用 sar 会产生恒定的行数:
for i in {1..10}; do sar -r -f /var/log/sysstat/sa02 | wc -l; done
知道这怎么会发生?