さまざまな入力引数を指定してコマンドライン プログラムを実行し、出力から特定の行を取得するスクリプトを作成しました。以下をループで実行しています。
p1 = subprocess.Popen(["program", args], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=False)
p2 = subprocess.Popen(["grep", phrase], stdin=p1.stdout, stdout=subprocess.PIPE, shell=False)
p1.wait()
p2.wait()
p = str(p2.stdout.readlines())
print 'p is ', p
1 つの問題は、ループの実行が終了した後にしか出力がないことです。プロセスが終了するたびに何かを印刷したい。どうやってやるの?
また、p1 の出力を表示するオプションが必要です。しかし、p2を壊さずにp1.stdout.readlines()でそれをつかむことはできません。これどうやってするの?
grep を呼び出して p1 の出力を保存し、フレーズを検索することはできないと思っていましたが、出力が多いため、この方法はかなり非効率的です。
どんな提案でも大歓迎です。ありがとう!