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すべての面倒な詳細を手動で正しく取得しようとする代わりに、 を使用する必要があります。