pythonスクリプト内のls
やdf
のようないくつかのシェルコマンドから出力を取得したい。commands.getoutput('ls')
は廃止されているただし、subprocess.call('ls')
は戻りコードのみを取得します。
簡単な解決策があることを願っています。
subprocess.Popenを使用します。
import subprocess
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
out, err = process.communicate()
print(out)
プロセスが終了するまでブロックを通信することに注意してください。終了する前に出力が必要な場合は、process.stdout.readline()を使用できます。詳細については、 documentation を参照してください。
Python> = 2.7の場合、subprocess.check_output()
を使用します。
http://docs.python.org/2/library/subprocess.html#subprocess.check_output
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