Mám skript v jazyku Python, ktorý potrebuje spustiť externý program, ale z nejakého dôvodu sa to nepodarí.
Ak mám nasledujúci skript:
import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();
Potom to zlyhá s nasledujúcou chybou:
C:\Temp\a' nie je rozpoznaný ako interný alebo externý príkaz, ovládateľný program alebo dávkový súbor.
Ak program vynechám pomocou úvodzoviek:
import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();
Potom to funguje. Ak však pridám parameter, opäť prestane fungovať:
import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();
Aký je správny spôsob spustenia programu a čakania na jeho dokončenie? Nepotrebujem z neho čítať výstup, pretože je to vizuálny program, ktorý vykoná úlohu a potom sa len ukončí, ale potrebujem počkať na jeho dokončenie.
Taktiež upozorňujem, že presunutie programu na cestu bez medzier tiež neprichádza do úvahy.
Ani to nefunguje:
import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();
Všimnite si vymenené jednoduché/dvojité úvodzovky.
S parametrom Notepadu alebo bez neho tu zlyhá s chybovou správou
Syntax názvu súboru, názvu adresára alebo označenia zväzku je nesprávna.
subprocess.call
sa vyhnete problémom, keď sa budete musieť vysporiadať s konvenciami citovania rôznych shellov. Akceptuje skôr zoznam ako reťazec, takže argumenty sa ľahšie oddeľujú, t. j.
import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])
Tu je iný spôsob, ako to urobiť.
Ak používate systém Windows, nasledujúci postup sa správa ako dvojkliknutie na súbor v Prieskumníkovi alebo zadanie názvu súboru ako argumentu príkazu DOS "start": súbor sa otvorí v akejkoľvek aplikácii (ak existuje), s ktorou je spojená jeho prípona.
filepath = 'textfile.txt'
import os
os.startfile(filepath)
Príklad:
import os
os.startfile('textfile.txt')
Toto otvorí súbor textfile.txt pomocou Poznámkového bloku, ak je Poznámkový blok asociovaný so súbormi .txt.
Mám podozrenie, že je to rovnaký problém ako pri používaní skratiek v systéme Windows... Skúste toto:
import os;
os.system("\"C:\\Temp\\a b c\\Notepad.exe\" C:\\test.txt");