python - 在 Python 中调用 sar 会产生奇怪的结果

标签 python bash sar

我正在尝试使用子进程解析 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

知道这是怎么发生的吗?

最佳答案

假设 p.poll() 返回一个返回码,但 p.stdout 缓冲区仍然保存一些数据?尝试这样的事情:

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=0)
    for line in p.stdout:
        count += 1

这将耗尽标准输出缓冲区中的所有行。

关于python - 在 Python 中调用 sar 会产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672171/

相关文章:

linux - 为什么在shell脚本中使用ls重定向只写入一个文件名

memory - 如何找到内存访问次数

python - 有没有一种方法可以在Python中以自定义方式对自定义对象进行排序?

python - 在python上输入()后自动重新启动程序

bash - 使用名称模式 *.[a-z0-9].bundle.* 重命名所有文件,以将 [a-z0-9] 替换为给定字符串

bash - 为什么 &> 优于 >&?

linux - 了解 sysstat sar 内存输出

linux - 创建 bash 脚本

python - 如何通过索引访问pytorch模型参数

python - Matplotlib 中的非线性第二轴