sponsored link

[Python] subprocessモジュールでバッククォートを使う場合

結論: subprocess.run() コマンド実行時にオプションとして shell=True を指定します。

subprocess.Popen()subprocess.check_output() でも同様)

command = "hoge `foo -bar tim`"
subprocess.run(command, shell=True)

subprocessのそれぞれのクラスでは標準ではシェルを経由していない(shellオプションがFalseになっている)ため、シェルの文法であるバッククォートを使用すると何かしらのエラーが出ることになります。

公式のドキュメント(https://docs.python.org/ja/3.5/library/subprocess.html)を確認してみて、オプションにshellオプションが指定できる場合は指定しておきましょう。

shell=Tureを使用しない場合における、
バッククウォートによるエラー例

shell=Tureを使用しない場合は、下記のようなエラーが生じたりします。(私の例)

subprocess.run(command) で実行した場合、
No such file or directory:
のエラーが出ました。

subprocess.run(command.split()) で実行した場合、
unknown option `foo’
のエラーが出ました。

subprocess.check_output(command) で実行した場合、
No such file or directory:
と言うエラーが出ました。

subprocess.check_output(command.split()) で実行した場合、
returned non-zero exit status 129
と言うエラーが出ました。

逆にこのようなエラーが出た場合は、バッククォートがコマンドに含まれていることが原因かもしれませんね。

プログラミング

コメント一覧

sponsored link
KANOE STUDIO
タイトルとURLをコピーしました