1

サブプロセスを使用して 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

どのようにこれが起こることができますか?

4

2 に答える 2

1

ここで poll を使用している理由はわかりませんが、使用しないのはなぜcommunicateですか ?

import sys
import subprocess

fn = sys.argv[1]

p = subprocess.Popen('sar -r -f %s' % fn.split(' '), shell=True, stdout=subprocess.PIPE)
outs, errs = p.communicate()
print("num lines = %d" % len(outs.splitlines())
于 2014-09-04T18:33:31.527 に答える