単純なUNIX bashコマンドシェルとして機能するPythonスクリプトを作成しようとしています。スクリプトからすべての出力をブロックし、2つのファイルのいずれかにリダイレクトする必要があります(エラーまたは出力)。残念なことに、ディレクトリ上でbashコマンドを実行すると、 "grep:test_dir:ディレクトリです"という出力が得られます。これは、sys.stdoutを一時ファイルにリダイレクトした後です。私の理論は、grep自体が単に出力を返すのではなく、出力をリセットしてこのエラーを出力するということです。すべての出力をファイルにリダイレクトする方法はありますか?それとも、私はちょうどpythonでリダイレクトする方法を誤解していますか?subprocess.call出力のリダイレクトは動作しません
ここは私の現在のコードです。パイソンdocから
try:
temp_out = sys.stdout
sys.stdout = open('./temp.txt', 'w+')
output = subprocess.call(['grep', search[0], search[1]])
sys.stdout = temp_out
except subprocess.CalledProcessError as err:
print output
err_output = err.returncode
print "In error"
これは私が必要としていたものです。それは私が操作できる異なる変数に戻り値と考えられるエラーの両方を分離します。 –
@JacobChesley実際には、サブプロセスの出力とエラーだけをファイルにリダイレクトしたい場合は、9000の方が優れています。あなたのプログラムで 'print(...) 'を含むすべてのものをリダイレクトしたいのであれば、私のほうがいいです。 – Liteye
この場合、印刷を含むサブプロセスのすべての出力をリダイレクトしたかったのです。これは、私が必要とするフォーマットにすべての出力を操作できるようになったためです。この場合、あなたのソリューションは私が探していたものでしたが、9000'sは将来の努力のためにフードの下に置くことをお勧めします。 –