2016-07-05 1 views
0

私は、bashコマンドがデータを表示するのではなくファイルに保存する、Pythonでbashコマンドを実行しようとしています。このようなコマンドの例は、私が何bar.txtが発生していないのpythonコードを実行すると、現在の私のコードは次のようデータをファイルに保存するPython run bashコマンド

process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE) 
process.communicate() 

のように見えます

$ echo 'foo' > bar.txt 

です。どのようにbashスクリプトからデータを保存するかについてのアイデア?データは保存されるだけでは表示されません。

+2

'>'を使ったリダイレクションと 'echo'のようなシェル組み込みコマンドは' bash'を必要とします。ですから 'Popen'に' shell = True'を追加してください。 – cdarke

+2

コマンド出力を '>'でリダイレクトすると、 'stdout'引数を渡すポイントがありません。 – chepner

答えて

0

print()を使用してください。そのような単純な。コンソールに通常印刷されるものは、>コマンドのためにファイルに出力されます。

~$ python3.5 your_script.py > bar.txt 

あなたが>とあなたのPythonスクリプトを実行したくない場合は、ファイルへのデータの文字列バージョンを書くことのpythonのファイル操作を使用する必要があります:

with open('bar.txt', 'w') as F: 
    F.write(data) 
+0

残念なことに、このオプションは、ユーザアクションのために他のプリントを表示する必要があるため利用できません –

+0

次に、出力をPythonで文字列として割り当て、 'open(filename、 'w')をF:F.write (string) 'を使用してファイルに書き込みます。 –

+0

ありがとう、それは問題を解決する –

0

デフォルトで、subprocess.Popen()はシェル経由でコマンドを実行しないため、I/Oリダイレクション演算子は特別な意味を持ちません。通常の引数として扱われます。あなたがしていることを達成する最も簡単な方法は、シェルを使用させることです。 Popen()を使用すると、shell=Trueを渡すだろう、とあなたはは、コマンド文字列分割しないでしょう。

process = subprocess.Popen(bashCommand, stdout=subprocess.PIPE, shell=True) 

をまたsubprocess.call()(パイソン2)またはsubprocess.run()(Pythonの3)便利な機能があなたにどんな利点を提供するかどうかを検討すべきです。しかし、彼らがそうしているかどうかは明らかではありません。特に、両方のケースで同じshell引数を使用する必要があります。

関連する問題