[Tutor PyCZ] spousteni externich programu a vstupu a vystupy
Karel Srot
karel.do.pekla.zajel na seznam.cz
Úterý Říjen 10 18:13:36 CEST 2006
kazdopadne diky za snahu.. :-)
opravdu chci, aby programy komunikovaly pomoci roury. Mel jsem to
udelane tak, ze
pomoci popen4() spustim externi program a ziskam std. vstup a std. a
chybovy vystup. Na vstup neco posilam a z vystupu ctu. A tak stale
dokola. Problem je v tom, ze ten externi program nekdy nevrati zadny
vystup, tedy ja mu neco poslu, ale on neudela nic. Nasledny pokus o
cteni readline() tedy zpusobi deadlock. Potreboval bych tedy
zkontrolovat, zda externi program neco poslal a teprve pokud ano, tak to
nacist.
Ten objekt stringIO by mohl pomoci, protoze, aspon jak to chapu,
umoznuje nacitat prubezne z neuzavreneho souboru. Ale nevim, jak
externimu programu predhodit tento objekt, aby jej pouzil jako vystup..
Karel
Jiří Popek napsal(a):
> myslim, ze budem muset komunikovat konkretneji - rozepis se vice o
> problemu
>
> std vstup i vystup si muzes predstavit jako normalni soubor -
> funkce print napr. posila svuj vystup na stdout - nastavenim stdout do
> souboru bude do neho zapsan vsechen std vystup, ktery bude vysledkem
> souboru spusteneho napr. pomoci execfile()
>
> stejne by mel fungovat i stdin, ze ktereho bude externi program cist
> tak, jako bychom to psali pomoci klavesnice - je-li tedy ocekavam
> vstup pomoci raw_input(), bude tento nacten defaultne ze sys.stdin.read()
>
> Problem ktery popisujes ty ale spise vypada na to, ze chces, aby dva
> programy komunikovaly pomoci "roury", coz by se mnout naznacenym
> zpusobem melo taky dat realizovat.
> J.
>
> On 10/10/06, *Karel Srot* <karel.do.pekla.zajel na seznam.cz
> <mailto:karel.do.pekla.zajel na seznam.cz>> wrote:
>
> Asi jsem to nepochopil. Tim sys.stdout mohu napriklad nastavit, aby
> standardni vystup meho programu sel do souboru. Ale ja chci
> zpracovavat
> vystup externiho programu, ktery z programu teprve poustim. To jde
> takto
> take? A jak tedy nastavim vstup/vystup pro externi program?
>
> Karel
>
> Jiří Popek napsal(a):
> > k tomu slouzi
> >
> > import sys
> > sys.stdout
> > sys.stderr
> > sys.stdin
> >
> > temto objektum muzes priradit napr. StringIO objekt nebo nejaky
> soubor
> > a tvuj program ktery spoustis jej bude pouzivat jako klasicky
> > vystup/vstup. Na konci nezapomen nastavit tyto hodnoty na puvodni.
> > J.
> >
> > On 10/10/06, *Karel Srot* < karel.do.pekla.zajel na seznam.cz
> <mailto:karel.do.pekla.zajel na seznam.cz>
> > <mailto:karel.do.pekla.zajel na seznam.cz
> <mailto:karel.do.pekla.zajel na seznam.cz>>> wrote:
> >
> > Zdravim vsechny,
> > mam nasledujici dotaz. zkousel jsem najit odpoved v nejake
> dokumentaci
> > ci prikladech, ale jsem z toho tulpachovej.
> >
> > Mam externi program. Ten chci z pythonu spustit, posilat mu
> neco na
> > vstup a prebirat vystup. Zatim jsem pouzil funkci popen4.
> Vim, ze
> > vhodnejsi by bylo pouzit modul subprocess, ale v tom se moc
> > neorientuju.
> > Navic mi jde o to, najit funkcni reseni a pochopit ho,
> takze klidne
> > piste reseni pomoci subprocess.
> >
> > Problem je v tom, ze ten program ne vzdy da vystup. Takze ja
> mu muzu
> > poslat data a on nemusi vubec odpoved. Upravit tento program
> nelze,
> > proste to tak funguje. Jak zjistim, ze program neco poslal
> na vystup?
> > Nelze pouzit readline ci read, protoze to zpusobi cekani na
> konec
> > radku/souboru. Jak tedy provest kontrolu toho, ze muzu neco
> cist a
> > pak
> > to teprve nacist.
> >
> > Dalsi dotaz je podobny. Kdybych presmeroval vystup externiho
> > programu do
> > souboru a v pythonu pak z toho souboru cetl, tak fungovalo
> by to? Tedy
> > ja bych programu neco poslal, on by to vypsal do souboru a
> ja bych
> > ten
> > soubor prubezne cetl? Resp. jak bych ho mel cist?
> >
> > Diky za odpoved, snad jsem to napsal srozumitelne.
> >
> > Karel
> > _______________________________________________
> > Tutor mailing list
> > Tutor na py.cz <mailto:Tutor na py.cz> <mailto:Tutor na py.cz
> <mailto:Tutor na py.cz>>
> > http://www.py.cz/mailman/listinfo/tutor
> >
> >
> >
> ------------------------------------------------------------------------
>
> >
> > _______________________________________________
> > Tutor mailing list
> > Tutor na py.cz <mailto:Tutor na py.cz>
> > http://www.py.cz/mailman/listinfo/tutor
> <http://www.py.cz/mailman/listinfo/tutor>
>
> _______________________________________________
> Tutor mailing list
> Tutor na py.cz <mailto:Tutor na py.cz>
> http://www.py.cz/mailman/listinfo/tutor
> <http://www.py.cz/mailman/listinfo/tutor>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Tutor mailing list
> Tutor na py.cz
> http://www.py.cz/mailman/listinfo/tutor
Další informace o konferenci Tutor