外部プログラムを実行する必要がある Python スクリプトがありますが、何らかの理由で失敗します。
次のスクリプトがあるとします。
import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();
すると、次のエラーが発生して失敗します。
'C:\Temp\a' は、内部または外部のコマンド、操作可能なプログラム、またはバッチ ファイルとして認識されません。
プログラムを引用符でエスケープする場合:
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();
一重引用符と二重引用符が入れ替わっていることに注意してください。
ここでメモ帳にパラメータを指定しても指定しなくても、エラーメッセージが表示されて失敗します。
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません。
ベストアンサー1
subprocess.call
さまざまなシェルの引用規則に対処する必要のある問題を回避します。文字列ではなくリストを受け入れるため、引数の区切りが簡単になります。つまり、
import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])