GNU/Linux >> Linux の 問題 >  >> Linux

サブプロセス呼び出しをテキスト ファイルにパイプするにはどうすればよいですか?

popen のオプション call で使用できます

args, 
bufsize=0, 
executable=None, 
stdin=None, 
stdout=None, 
stderr=None, 
preexec_fn=None, 
close_fds=False, 
shell=False, 
cwd=None, 
env=None, 
universal_newlines=False, 
startupinfo=None, 
creationflags=0

だから...

myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=myoutput)

その後、 myoutput でやりたいことができます

また、このようなパイプ出力に近いこともできます。

dmesg | grep hda

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

Python のマニュアル ページには、素敵で役立つ情報がたくさんあります。


出力をファイルに書き込みたい場合は、subprocess.call の stdout-argument を使用できます。 .

  • None (デフォルトでは、stdout は親 (スクリプト) から継承されます)
  • subprocess.PIPE (あるコマンド/プロセスから別のコマンド/プロセスにパイプできます)
  • ファイル オブジェクトまたはファイル記述子 (出力をファイルに書き込むために必要なもの)

open のようなファイルを開く必要があります オブジェクトまたはファイル記述子の整数を call に渡します :

f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=f)

ソケットのように有効なファイルのようなオブジェクトならどれでも機能すると思いますが (あえぎ :))、試したことはありません。

marcog がコメントで言及しているように、stderr もリダイレクトしたい場合があります。これを stderr=subprocess.STDOUT で stdout と同じ場所にリダイレクトできます。 .上記の値のいずれも機能し、別の場所にリダイレクトできます。


Linux
  1. Linuxでファイルの終わりにテキストを簡単に追加する方法

  2. テキストファイルで一致しない角かっこを見つける方法は?

  3. ファイルの先頭にテキストを挿入する方法は?

  1. Linuxでファイルの終わりにテキストを追加する方法

  2. ファイル内で \n を grep する方法

  3. 端末でテキスト ファイルを編集する方法

  1. テキストファイル内の重複行を削除するにはどうすればよいですか?

  2. テキストファイルの行を1行上または下に移動するにはどうすればよいですか?

  3. コマンドへの引数としてテキストファイルの各行を解析する方法は?