Edit detail for SpousteniExternichProgramu revision 1 of 1

1
Editor: pycz
Time: 2007/03/21 10:38:48 GMT+0
Note: opravy

changed:
-
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.


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.