zdravim, 2008/8/24 Martin Stiborský <[EMAIL PROTECTED]>: > Zdravím. > Hraju si se spuštěním bash skriptu z Pythonu, využívám k tomu modulu > subprocess. > Skriptík sem tam něco vypíše na stdout, já tyhle hlášky sice umím > sbírat do proměnné v pythonu, ale vypisovat je umím až když bash > skriptík dokončí svoji činnost. > Šlo by to udělat trochu "interaktivněji" ? Tedy hned jak něco skriptik > pošle ven přes echo, sebrat to Pythonem a hned s tím něco provést .. >
pokud jsem vse dobre pochopil, tak problem co popisujete je zrejme ze se read zablokuje dokud neprecte veskery vstup ze skriptu. muzete pouzit neblokujici variantu read, tu v pythonu naleznete v modulu os jako funkci os.read. Funkce prijima dva argumenty: 1) file deskriptor (zjistije z file objektu metodou fileno) a 2) maximalni pocet bytu ktere je mozne precist. Funkce se zablokuje jen v okamziku kdy nejsou k dispozici *zadna* data; pokud jsou data k dispozici, tak je vrati neprodlene. Zablokovani v pripade zadnych dat muzete predejit pouzitim funkce select.select, ktera vam umozni zjistit zda-li jsou nejaka data k dispozici. Nejlepe snad mala ukazka: from subprocess import Popen, PIPE from select import select import os p = Popen("./test.sh", stdout=PIPE) s = True # to je mala finta, aby se while cyklus alespon jednou vykonal while s: (r,w,e) = select([p.stdout],[],[],0) if r: s = os.read(p.stdout.fileno(),23) # os.read vraci prazdny string v pripade konce vstupu print s Mozna budete spokojen i s verzi bez select: p = Popen("./test.sh", stdout=PIPE) s = True while s: s = os.read(p.stdout.fileno(),23) print s Jedina neprijemnost je s tim, ze musite zadavat maximalni pocet prectenych znaku a v pripade ze je vstup delsi, musite ho rucne skladat (tj. vstup je "nebufferovany"). S pozdavem, honza. > -- > S pozdravem > Martin Stiborský > > Jabber: [EMAIL PROTECTED] > ICQ: 224-065-849 > _______________________________________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python