[python] windows: spousteni externich programu

Jan Martinek honza na dp.fce.vutbr.cz
Čtvrtek Březen 23 16:43:17 CET 2006


Petr Vaněk wrote:
> Dne čtvrtek 23 březen 2006 15:20 Leos Pol napsal(a):
> 
>>Mozna jsem presne neporozumel problemu, ale na spousteni externich
>>binarek lze pouzit treba os.popen*.
>>
>>    import os
>>    fd = os.popen3('dot -Tpng -o %s.png' % fname)
>>    fd[2].read()
> 
> 
> ajaj, tu jedinou radku v dokumentaci jsem prehledl. Jen abych se ujistil:
> * kdyz externi prog. sebehne v poradku, vsechno jede dal a v file 
> deskriptorech mam stdout, err atd.
> * kdyz ale shell prog. nenajde, popr. prg. spadne s chybou, nezjistim to 
> jinak, nez pochybnym parsovanim spolecneho vystupu ze stdout_stderr. Pochopil 
> jsem to dobre?
> 
> 

Opravdu se nechci vnucovat s tím modulem subprocess, ale ve srovnání s 
os.popen3 má jisté výhody:

- parametry předává jako "list", takže nevzniknou problémy s mezerami v 
názvu souboru atd.

- když nenajde binárku, tak způsobně vyhodí výjimku

Například tento program:

#!/usr/bin/env python
import subprocess, os

prog_name = 'false'
try:
   process = subprocess.Popen([prog_name])
   retvalue = process.wait()
   if retvalue:
     print 'program se sice povedlo pustit, ale neco selhalo'
   else:
     print 'vse OK'
except OSError, error:
   print 'nepovedlo se ho pustit'
   print error

otestuje všechny situace - jestli se program povedlo spustit a pokud 
ano, tak se ještě podívá na návratový kód.


Další informace o konferenci Python