2016-06-17 10 views
1

に私は、これは正常に動作し、第二のスクリプトを実行しますPythonのos.systemコマンドラインの戻り値バックのpython

os.system('insert command line arguments here') 

を使用して私のスクリプト内からコマンドラインのために書かれている第二のPythonスクリプトを呼び出していますターミナル。私はこれをターミナルで出力しないようにしたいだけで、印刷されているリストと変数にアクセスするだけです。これはos.systemを使って可能ですか?それとも別のものを使う必要がありますか?

+0

それはスクリプトとして実行しているのではなく、モジュールをインポートするのが最善です。 [サブプロセスを使ってpythonスクリプトで入力したpythonスクリプトを呼び出す]を参照してください。(http://stackoverflow.com/q/30076185/4279) – jfs

答えて

1

サブプロセスモジュールを使用して、その出力をパイプでリダイレクトすることができます。

たとえば、現在のディレクトリにあるファイルのリストを取得する。

import subprocess 
proc = subprocess.Popen(['ls'], stdout=subprocess.PIPE) 
print(proc.stdout.readlines()) 

詳細ここRedirecting stdio from a command in os.system() in Python

編集:あなたはそれぞれが引用符の独自のセットを取得しますsubprocess.Popenに引数を渡すしようとしている場合。

proc = subprocess.Popen(['python','test.py','-b','-n'], stdout=subprocess.PIPE) 

そしてドキュメントは、使用できsnoozeTimeの答えに代わりhttps://docs.python.org/2/library/subprocess.html

+0

ありがとうございました。これは 'ls'で動作しますが、pythonスクリプトを実行しようとするとこのエラーが発生します:OSError:[Errno 2]このようなファイルやディレクトリはありません。しかし、私のスクリプトは、実行しようとしている2番目のスクリプトと同じディレクトリにあります。何か案は? – miltonjbradley

+0

同じディレクトリに2つのスクリプトを試しました。 proc = subprocess.Popen(['python'、 'script.py']、stdout = subprocess.PIPE)を使うと完全に動作しました。 – SnoozeTime

+0

私はコマンドを分割していなかったので、私は 'python'、 'script.py'を 'python script.py'と書いていました。これでディレクトリの問題が修正されました。ちょうど空のリストを印刷しています。私は、スクリプトを単にコンソールに印刷するときにスクリプトが動作していることを確認できます。 – miltonjbradley

1

import subprocess 
output = subprocess.check_output(['ls']) 
print(output)