1. ホーム
  2. パイソン

[解決済み】Pythonからプログラムを実行するには? os.systemは、パスにスペースがあるため失敗します。

2022-03-31 20:29:48

質問

Pythonスクリプトで外部プログラムを実行する必要があるのですが、何らかの理由で失敗します。

以下のようなスクリプトがあった場合。

import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();

すると、以下のようなエラーが出て失敗します。

C:Tempa' is not recognized as internal or external command, operable program or batch file.

プログラムを引用符で囲むと

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();

すると、うまくいくのです。しかし、パラメータを追加すると、また動かなくなります。

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();

プログラムを実行し、完了するまで待つには、どのような方法が正しいのでしょうか?これはビジュアルプログラムなので、出力を読む必要はありませんが、プログラムが完了するのを待つ必要があります。

また、プログラムをノンスペースのパスに移動させることも選択肢にないことに注意してください。


これもうまくいきません。

import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();

シングルクォートとダブルクォートが入れ替わっていることに注意してください。

ここでメモ帳にパラメータを指定してもしなくても、エラーメッセージが出て失敗します。

ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません。

解決方法は?

subprocess.call を使えば、様々なシェルのクォート規則に対応しなければならない問題を回避することができます。また、文字列ではなくリストで指定できるため、引数の区切りがより簡単になります。

import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])