Pythonからのコマンド実行にはsubprocessを使う
今までずっとPythonからのコマンド実行はOSモジュールのos.system
を使っていたのですが、最近はsubprocessを使うのが現代的らしいので使い方をメモっておきます。
subprocessの使い方
import subprocess cmd = 'echo helloworld!' res = subprocess.call(cmd, shell=True)
引数にコマンドを指定していると、dirやechoなどのWindows特有のコマンドを呼び出そうとしても「FileNotFoundError: 指定されたファイルは見つかりません」というエラーが帰ってくるので、Windowsのcmdを叩く際は引数にshell=True
を付けておく必要があります。
ちなみにPythonからのPowershellコマンドの実行については以下の記事を参考にして下さい。
関連記事:【Python】Pythonからコマンドライン/PowerShellを実行する方法
またコマンドの戻り値をPythonで取得する際は引数にstdout=subprocess.PIPE
を追加し、.communicate()
を使います。
cmd = 'echo helloworld!' res = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True).communicate() print(res[0]) ※b'helloworld!\r\n'
デフォルトだとバイナリで返ってくるので文字列にしたい場合は.decode()
でデコードしてあげる必要があります。
参考: http://stackoverflow.com/questions/4813238/difference-between-subprocess-popen-and-os-system
参考: http://stackoverflow.com/questions/19819417/how-to-use-subprocess-in-windows
コメント
[…] 関連記事:【Python】subprocessでPython上からコマンドを実行する […]
[…] 関連記事:【Python】subprocessでPython上からコマンドを実行する […]
[…] 関連記事:【Python】subprocessでPython上からコマンドを実行する […]
[…] 関連記事:【Python】subprocessを使ってPython上からシェルコマンドを実行する […]