2011-07-11 2 views
48

pythonスクリプトでlsまたはdfのようなシェルコマンドの出力を取得したいとします。 commands.getoutput('ls')は廃止されましたが、subprocess.call('ls')は私にリターンコードしか渡されません。サブプロセスのgetoutput()と同等です

私はいくつかの簡単な解決策があると思います。

答えて

70

使用subprocess.Popen:プロセスが終了するまでブロックを通信

import subprocess 
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE) 
out, err = process.communicate() 
print(out) 

注意。終了する前に出力が必要な場合はprocess.stdout.readline()を使用できます。詳細については、documentationを参照してください。

+0

subprocess'例 'のPythonの2.7バージョンの正しい現在のドキュメントリンクがある:http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the -subprocess-module; Python 3.2の場合はhttp://docs.python.org/py3k/library/subprocess.html#replacing-older-functions-with-the-ubprocess-module –

+5

おそらく、サブプロセスcom.municate()をプロセスに置き換える必要があります。また、process.returncodeを実行してサブプロセスの終了コードが必要な場合があります。 – Cinquo

+0

プロセスの代わりにサブプロセスを記述していることに気付かなかった。一定。 –

36

Python> = 2.7の場合、subprocess.check_output()を使用してください。

http://docs.python.org/2/library/subprocess.html#subprocess.check_output

+4

技術的には、 'subprocess.check_output(cmd、shell = True)'でなければなりません。 – Cerin

+1

シェルの違いは何ですか? –

+1

私はそれがファイルglobbing、配管などの "シェル特有の機能"を可能にすると思います... –