de-vraag
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
angry person
angry person
Question

Ako môžem spustiť program z Pythonu? os.system zlyhá kvôli medzerám v ceste

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.

262 2008-10-15T08:24:28+00:00 3
Peter Mortensen
Peter Mortensen
Edited question 17 január 2018 в 8:22
Programovanie
python
shellexecute
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
 Brian
Brian
15 október 2008 в 8:37
2008-10-15T08:37:39+00:00
Viac na
Zdroj
Upraviť
#8566384

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'])
Daniel Rikowski
Daniel Rikowski
Edited answer 19 december 2012 в 12:07
285
0
 user16738
user16738
15 október 2008 в 8:09
2008-10-15T20:09:37+00:00
Viac na
Zdroj
Upraviť
#8566385

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.

Peter Mortensen
Peter Mortensen
Edited answer 17 január 2018 в 8:24
64
0
Matthew Scharley
Matthew Scharley
15 október 2008 в 8:27
2008-10-15T08:27:05+00:00
Viac na
Zdroj
Upraviť
#8566383

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");
Matthew Scharley
Matthew Scharley
Edited answer 15 október 2008 в 9:16
4
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
Zuxriddin Muydinov
Registered pred 11 hodinami
2
Денис Анненский
Registered pred 2 dňami
3
365
Registered pred týždňom
4
True Image
Registered pred týždňom
5
archana agarwal
Registered pred týždňom
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RO
RU
SK
SL
TR
ZH
© de-vraag 2022
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora