Kako izvedem program iz Pythona? os.system ne uspe zaradi presledkov v poti

Imam skripto v Pythonu, ki mora izvesti zunanji program, vendar iz nekega razloga ne uspe.

Če imam naslednjo skripto:

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

Potem ne uspe z naslednjo napako:

'C:\Temp\a' ni prepoznan kot notranji ali zunanji ukaz, operativni program ali paketna datoteka.

Če se izognem programu z narekovaji:

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

Potem deluje. Če pa dodam parameter, program spet ne deluje več:

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

Kakšen je pravi način za izvajanje programa in čakanje, da se program zaključi? Ne potrebujem brati izhodnih podatkov, saj gre za vizualni program, ki opravi nalogo in se nato samo zaključi, vendar moram počakati, da se zaključi.

Upoštevajte tudi, da premikanje programa na pot brez razmikov prav tako ne pride v poštev.


Tudi to ne deluje:

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

Upoštevajte zamenjane enojne/dvojne narekovaje.

S parametrom ali brez parametra za Notepad na tem mestu se neuspešno izvede s sporočilom o napaki

Sintaksa imena datoteke, imenika ali oznake zvezka je napačna.

Rešitev

subprocess.call se boste izognili težavam z navajanjem citatov v različnih lupinah. Sprejme seznam in ne niza, zato je argumente lažje razmejiti, npr.

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

Tukaj je drugačen način.

Če uporabljate operacijski sistem Windows, naslednje deluje podobno kot dvojni klik na datoteko v Raziskovalcu ali podajanje imena datoteke kot argumenta ukaza DOS "start": datoteka se odpre v aplikaciji, s katero je povezana njena končnica (če obstaja).

filepath = 'textfile.txt'
import os
os.startfile(filepath)

Primer:

import os
os.startfile('textfile.txt')

To bo odprlo datoteko textfile.txt s programom Notepad, če je program Notepad povezan z datotekami .txt.

Komentarji (3)

Domnevam, da gre za isto težavo kot pri uporabi bližnjic v operacijskem sistemu Windows... Poskusite s tem:

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