4

Python から stdout に書き込み、同時に (Unix パイプ経由で) 別のプログラムにフィードするにはどうすればよいですか? たとえば、

# write file line by line
with open("myfile") as f:
  for line in f:
    print line.strip()

しかし、それを 1 行ずつ別のプログラムに渡したい場合があります。たとえば| wc -lmyfile. どうすればそれができますか?ありがとう。

4

1 に答える 1

7

外部にパイプpythonしたい場合、それは簡単で、うまくいきます:wc

python myscript.py | wc -l

その出力が出力されて にパイプされるようにしたい場合はwc、試してみるman teeか、シェルの組み込みの凝ったリダイレクト機能を試してください。

wc -lスクリプト内から実行し、出力を stdout とその両方に送信する場合は、それも可能です。

まず、 を使用subprocess.Popenして開始しwc -lます。

wc = subprocess.Popen(['wc', '-l'], stdin=subprocess.PIPE)

今、あなたはこれを行うことができます:

# write file line by line
with open("myfile") as f:
  for line in f:
    stripped = line.strip()
    wc.stdin.write(stripped + '\n')

これwcにより、の出力がスクリプトと同じ場所に移動します。stdoutそれが望ましくない場合は、PIPEにすることもできます。その場合、communicateすべての面倒な詳細を手動で正しく取得しようとする代わりに、 を使用する必要があります。

于 2013-01-18T23:53:14.467 に答える