web-dev-qa-db-ja.com

pythonサブプロセスでgetoutput()と同等)

pythonスクリプト内のlsdfのようないくつかのシェルコマンドから出力を取得したい。commands.getoutput('ls')は廃止されているただし、subprocess.call('ls')は戻りコードのみを取得します。

簡単な解決策があることを願っています。

59
Rafael T

subprocess.Popenを使用します。

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

プロセスが終了するまでブロックを通信することに注意してください。終了する前に出力が必要な場合は、process.stdout.readline()を使用できます。詳細については、 documentation を参照してください。

83
Michael Smith

Python> = 2.7の場合、subprocess.check_output()を使用します。

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

46
knite

subprocess.check_output()でエラーをキャッチするには、CalledProcessErrorを使用できます。出力を文字列として使用する場合は、バイトコードからデコードします。

# \return String of the output, stripped from whitespace at right side; or None on failure.
def runls():
    import subprocess
    try:
        byteOutput = subprocess.check_output(['ls', '-a'], timeout=2)
        return byteOutput.decode('UTF-8').rstrip()
    except subprocess.CalledProcessError as e:
        print("Error in ls -a:\n", e.output)
        return None
3
Roi Danton