[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