V Pythonu existuje několik způsobů, jak spustit externí program (exe, com, bat, ...) nebo otevřít soubor, který je asociovaný s nějakou aplikací.

Spouštění jiného pythonovského skriptu

Příklad:

execfile('mujscript.py')

# nebo i

import mujscript

Spouštění programů

Na toto má Python několik funkcí, záleží na tom, co vám stačí, co přesně chcete. Existuje mnoho podvariant následujících příkazů, hledejte v manuálu. Od Pythonu 2.5 je nejlepší využívat služeb modulu subprocess.

Spuštění programů v novém procesu

Příklad:

import subprocess
proces=subprocess.Popen([r"c:\Program Files\Mozilla Firefox\firefox.exe", "http://www.py.cz"])
# proces.wait()  # pred pokracovanim, muze pockat na dokonceni noveho procesu
print "hotovo"

Spouštění příkazů

Příklad:

import subprocess
proces=subprocess.Popen('dir', stdout=subprocess.PIPE, shell=True)
print proces.stdout.read()
print "hotovo"

Poznámka pro Windows: Spouštíte-li příkazy, jejichže se seznam se dá získat pomocí help na příkazové řádce, je třeba vždy použít shell=True. V ostatních případech nikoliv.

Windows only

Spouštění asociovaných aplikací

os.startfile(cesta)

Příklad:

os.startfile('mujPraveVygenerovanyDokument.html')  # spuštění prohlížeče s dokumentem
os.startfile('mailto:uzivatel@nejaka.adresa.cz')   # spuštění poštovního programu
os.startfile('c:/WINNT/odbc.ini')                  # spustí editor nad souborem odbc.ini

Jde o ekvivalent příkazu 'start' prováděného na příkazovém řádku windowsovské konzoly.

win32api

Pokud svůj program vytváříme v grafickém prostředí, výše uvedené příkazy vytváří rušící dosovské okno, ve kterém se příkaz vykonává.

Na toto existuje modul PyWin32, který tyto nectnosti odstraňuje. Na druhou stranu ovšem váš program přestává být multiplatformní, ale i to se dá ošetřit, různými if...

win32api.WinExec(cesta, argumenty)

WinExec je podobný os.system(), ale pod windows překonává jeho omezení, včetně mnoha možných argumentů.

win32api.ShellExecute()

Typicky otevírá různé dokumenty, tedy asociované aplikace.




subject:
  ( 112 subscribers )