注意点 †
- コマンドの渡し方
- Unix 系の場合には、コマンドを文字列のリストで渡す
- Windows 系の場合には、CMD /C コマンドの引数で渡す
- stderr = subprocess.STDOUT
- subprocess.check_output() には、shell = True も設定できる
- Unix 系の場合には、shell = True にすると、sh を起動して、その引数にコマンドを渡す形になる
- Windows 系の場合には、OS Error になるのでデフォルト (False) のままにする
- 子プロセスの標準出力は byteArray なので、decode('文字コード') で文字列にしてやる
Shellコマンド実行成功の場合 †
import subprocess
try :
out = subprocess.check_output(['echo','aiueo'], stderr=subprocess.STDOUT)
print('Success')
print('STDOUT:' + out.decode('utf8'))
except subprocess.CalledProcessError as cerr:
print('CalledProcessError occured')
print('CMD:' + str(cerr.cmd))
print('RET:' + str(cerr.returncode))
print('STDOUT:' + cerr.output.decode('utf8'))
Success
STDOUT:aiueo
SHELLコマンド実行失敗の場合 †
import subprocess
try :
out = subprocess.check_output(['cat','xxx'], stderr=subprocess.STDOUT)
print('Success')
print('STDOUT:' + out.decode('utf8'))
except subprocess.CalledProcessError as cerr:
print('CalledProcessError occured')
print('CMD:' + str(cerr.cmd))
print('RET:' + str(cerr.returncode))
print('STDOUT:' + cerr.output.decode('utf8'))
CalledProcessError occured
CMD:['cat', 'xxx']
RET:1
STDOUT:cat: xxx: No such file or directory
DOSコマンド実行成功の場合 †
import subprocess
try :
out = subprocess.check_output('cmd /c echo aiueo', stderr=subprocess.STDOUT)
print('Success')
print('STDOUT:' + out.decode('ms932'))
except subprocess.CalledProcessError as cerr:
print('CalledProcessError occured')
print('CMD:' + cerr.cmd)
print('RET:' + str(cerr.returncode))
print('STDOUT:' + cerr.output.decode('ms932'))
Success
STDOUT:aiueo
DOSコマンド実行失敗の場合 †
import subprocess
try :
out = subprocess.check_output('cmd /c dir a:', stderr=subprocess.STDOUT)
print('Success')
print('STDOUT:' + out.decode('ms932'))
except subprocess.CalledProcessError as cerr:
print('CalledProcessError occured')
print('CMD:' + cerr.cmd)
print('RET:' + str(cerr.returncode))
print('STDOUT:' + cerr.output.decode('ms932'))
CalledProcessError occured
CMD:cmd /c dir a:
RET:1
STDOUT:指定されたパスが見つかりません。
Python