subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
さて、実行するスクリプトがあります。実行してこの行にヒットすると、run.shに印刷が含まれているため、印刷を開始します。
これをテキストファイルにパイプする方法も教えてください。(また、可能であれば印刷します)
回答:
出力をファイルに書き込む場合は、stdout -argument ofを使用できますsubprocess.call
。
それはとり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=subprocess.STDOUT
。上記のいずれの値も機能し、別の場所にリダイレクトできます。
subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)
はずです。
shlex.quote
ダーティデータがサブシェルに渡されていないかどうかも確認してください。
with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
@ Skurmedel
のオプションは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のマニュアルページには、たくさんの素敵で便利な情報があります。