Mam skrypt w języku Python, który musi uruchomić program zewnętrzny, ale z jakiegoś powodu kończy się niepowodzeniem.
Jeśli mam następujący skrypt:
import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();
Następnie kończy się niepowodzeniem z następującym błędem:
„C: \ Temp \ a” nie jest rozpoznawane jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy.
Jeśli wyjdę z programu z cytatami:
import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();
To działa. Jeśli jednak dodam parametr, przestanie on działać:
import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();
Jaki jest właściwy sposób wykonania programu i oczekiwania na jego zakończenie? Nie muszę czytać z niego danych wyjściowych, ponieważ jest to program wizualny, który wykonuje zadanie, a następnie po prostu wychodzi, ale muszę poczekać, aż się zakończy.
Zauważ też, że przeniesienie programu na ścieżkę nieprzestrzenną również nie jest opcją.
To również nie działa:
import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();
Uwaga zamienione pojedyncze / podwójne cudzysłowy.
Z parametrem Notatnika lub bez niego, komunikat o błędzie nie powiedzie się
Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest niepoprawna.
"C:\Program Files\GDAL\gdal_translate.exe" -ot byte -of GTIFF -scale -co PHOTOMETRIC=CMYK "cmyk-16.tif" "cmyk-8_out.tif"
. W Pythonie, staje się: ["C:\\Program Files\\GDAL\\gdal_translate.exe", "-ot", "byte", "-scale", "-co", "PHOTOMETRIC=CMYK", "input_cmyk-16.tif", "output_cmyk-8.tif"]
.
os.system(r'C:\temp\"a b c"\Notepad.exe')
lub tego:os.system('C:\\temp\\"a b c"\\Notepad.exe')