subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
現在、実行するスクリプトがあります。実行してこの行にヒットすると、run.shに印刷が含まれているため、印刷が開始されます。
これをテキストファイルにパイプするにはどうすればよいですか? (可能な場合は印刷も)
出力をファイルに書き込みたい場合は、subprocess.call
の- stdout -argumentを使用できます。
None
、subprocess.PIPE
、ファイルオブジェクトまたはファイル記述子を取ります。最初はデフォルトで、stdoutは親(スクリプト)から継承されます。 2番目のコマンドでは、1つのコマンド/プロセスから別のコマンド/プロセスにパイプできます。 3番目と4番目は、出力をファイルに書き込むためのものです。
open
のようなファイルを開き、オブジェクトまたはファイル記述子の整数をcall
に渡す必要があります。
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
ソケット(gasp :))のように、有効なファイルのようなオブジェクトが機能すると思いますが、試したことはありません。
marcog がstderrをリダイレクトしたいコメントに言及しているので、これをstderr=subprocess.STDOUT
でstdoutと同じ場所にリダイレクトできます。上記の値はいずれも機能し、別の場所にリダイレクトできます。
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
そう...
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のマニュアルページ には、たくさんの素敵で役立つ情報があります。