Python から stdout に書き込み、同時に (Unix パイプ経由で) 別のプログラムにフィードするにはどうすればよいですか? たとえば、
# write file line by line
with open("myfile") as f:
for line in f:
print line.strip()
しかし、それを 1 行ずつ別のプログラムに渡したい場合があります。たとえば| wc -l
、myfile
. どうすればそれができますか?ありがとう。
Python から stdout に書き込み、同時に (Unix パイプ経由で) 別のプログラムにフィードするにはどうすればよいですか? たとえば、
# write file line by line
with open("myfile") as f:
for line in f:
print line.strip()
しかし、それを 1 行ずつ別のプログラムに渡したい場合があります。たとえば| wc -l
、myfile
. どうすればそれができますか?ありがとう。
外部にパイプ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
すべての面倒な詳細を手動で正しく取得しようとする代わりに、 を使用する必要があります。