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.