2016-06-27 13 views
0

私はPythonスクリプトから少数のシェルスクリプトを実行しています。特定のシェルスクリプト(コードの最後の行)の呼び出しは、Hiveクエリを実行してテーブル情報を取得するために使用され、この出力をファイルにリダイレクトします。ここで私のpythonスクリプトのように見えます。私はこれを実行するとシェルスクリプト出力をpythonスクリプトからリダイレクトする方法

$ cat test.py 
    import argparse 
    from subprocess import call 

    parser = argparse.ArgumentParser() 
    parser.add_argument('-c','--cutoff',required=True) 
    args = parser.parse_args() 

    Table="elements_status_values_"+ args.cutoff 
    call(["clear"]) 
    print ">> Running the hive query" 
    call(["hive", "-S", "-e" "select * from %s order by rand() limit 2;" % cutoffTable]) 

、私は端末に結果を得るが、私は、出力を使用して、いくつかのより多くの操作を行うにはPythonスクリプトからの出力をファイルにリダイレクトする必要があります。だから私は基本的には、同じスクリプト内の他の操作のためにファイルを使用できるようにファイルにリダイレクトされるように私のハイブクエリ出力をしたい。シェルスクリプトでは、 '>'を使用して出力をファイルにリダイレクトできますが、これはPythonを使って行うことができますか? これに関連する投稿を検索しましたが、それらのすべてがpythonスクリプトの出力を私が欲しくないファイルにリダイレクトしています。

+1

http://stackoverflow.com/questions/4856583/how-do-i-pipe-a-subprocess-call-:

現在のpython-固有の方法はsubprocess.runを使用すると、文字通りその標準出力をチェックすることですイン・パイソン・ツー・ア・テキスト・ファイル –

答えて

3

subprocess.calldocumentationを確認してください:stdoutstdinのようなパラメータを指定できます。

with open('output.txt') as output_file: 
    call([your_stuff], stdout=output_file) 

これは一般的な方法です。同様のアプローチは、Cや他の多くの言語でも機能します。

古いPython固有の方法は、subprocess.callの代わりにsubprocess.check_outputを使用することです。 output = run(..., check=True, stdout=PIPE).stdout

関連する問題