<br><br><div><span class="gmail_quote">On 10/10/06, <b class="gmail_sendername">Karel Srot</b> <<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
kazdopadne diky za snahu.. :-)<br>opravdu chci, aby programy komunikovaly pomoci roury. Mel jsem to<br>udelane tak, ze<br>pomoci popen4() spustim externi program a ziskam std. vstup a std. a<br>chybovy vystup. Na vstup neco posilam a z vystupu ctu. A tak stale
<br>dokola. Problem je v tom, ze ten externi program nekdy nevrati zadny<br>vystup, tedy ja mu neco poslu, ale on neudela nic. Nasledny pokus o<br>cteni readline() tedy zpusobi deadlock. Potreboval bych tedy<br>zkontrolovat, zda externi program neco poslal a teprve pokud ano, tak to
<br>nacist.<br><br>Ten objekt stringIO by mohl pomoci, protoze, aspon jak to chapu,<br>umoznuje nacitat prubezne z neuzavreneho souboru. Ale nevim, jak</blockquote><div><br>StringIO je takovy "soubor v pameti" - neni treba zakladat soubor nekde v tempu 
<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">externimu programu predhodit tento objekt, aby jej pouzil jako vystup..</blockquote>
<div><br>tak, ze vyuzijes parametry funkce execfile(), ktere jsou locals a glovbals,globals napr. takto:<br><br>from StringIO import StringIO<br>import sys<br>oldout = sys.stdout<br>myout = StringIO()<br>sys.stdout = myout
<br>d = {'__name__':'__main__', 'sys':sys}<br>execfile('ex.py', d, d)<br>sys.stdout = oldout<br>myout.seek(0)<br>print myout.buf</div><br><br>no a myout.buf nyni obsahuje vse, co program ext_program vyslal na standartni vystup
<br><br>J.<br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Karel<br><br><br>Jiří Popek napsal(a):<br>> myslim, ze budem muset komunikovat konkretneji - rozepis se vice o
<br>> problemu<br>><br>> std vstup i vystup si muzes predstavit jako normalni soubor -<br>> funkce print napr. posila svuj vystup na stdout - nastavenim stdout do<br>> souboru bude do neho zapsan vsechen std vystup, ktery bude vysledkem
<br>> souboru spusteneho napr. pomoci execfile()<br>><br>> stejne by mel fungovat i stdin, ze ktereho bude externi program cist<br>> tak, jako bychom to psali pomoci klavesnice - je-li tedy ocekavam<br>> vstup pomoci raw_input(), bude tento nacten defaultne ze 
sys.stdin.read()<br>><br>> Problem ktery popisujes ty ale spise vypada na to, ze chces, aby dva<br>> programy komunikovaly pomoci "roury", coz by se mnout naznacenym<br>> zpusobem melo taky dat realizovat.
<br>> J.<br>><br>> On 10/10/06, *Karel Srot* <<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz</a><br>> <mailto:<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz
</a>>> wrote:<br>><br>>     Asi jsem to nepochopil. Tim sys.stdout mohu napriklad nastavit, aby<br>>     standardni vystup meho programu sel do souboru. Ale ja chci<br>>     zpracovavat<br>>     vystup externiho programu, ktery z programu teprve poustim. To jde
<br>>     takto<br>>     take? A jak tedy nastavim vstup/vystup pro externi program?<br>><br>>     Karel<br>><br>>     Jiří Popek napsal(a):<br>>     > k tomu slouzi<br>>     ><br>>     > import sys
<br>>     > sys.stdout<br>>     > sys.stderr<br>>     > sys.stdin<br>>     ><br>>     > temto objektum muzes priradit napr. StringIO objekt nebo nejaky<br>>     soubor<br>>     > a tvuj program ktery spoustis jej bude pouzivat jako klasicky
<br>>     > vystup/vstup. Na konci nezapomen nastavit tyto hodnoty na puvodni.<br>>     > J.<br>>     ><br>>     > On 10/10/06, *Karel Srot* < <a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz
</a><br>>     <mailto:<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz</a>><br>>     > <mailto:<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz
</a><br>>     <mailto:<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz</a>>>> wrote:<br>>     ><br>>     >     Zdravim vsechny,<br>>     >     mam nasledujici dotaz. zkousel jsem najit odpoved v nejake
<br>>     dokumentaci<br>>     >     ci prikladech, ale jsem z toho tulpachovej.<br>>     ><br>>     >     Mam externi program. Ten chci z pythonu spustit, posilat mu<br>>     neco na<br>>     >     vstup a prebirat vystup. Zatim jsem pouzil funkci popen4.
<br>>     Vim, ze<br>>     >     vhodnejsi by bylo pouzit modul subprocess, ale v tom se moc<br>>     >     neorientuju.<br>>     >       Navic mi jde o to, najit funkcni reseni a pochopit ho,<br>>     takze klidne
<br>>     >     piste reseni pomoci subprocess.<br>>     ><br>>     >     Problem je v tom, ze ten program ne vzdy da vystup. Takze ja<br>>     mu muzu<br>>     >     poslat data a on nemusi vubec odpoved. Upravit tento program
<br>>     nelze,<br>>     >     proste to tak funguje. Jak zjistim, ze program neco poslal<br>>     na vystup?<br>>     >     Nelze pouzit readline ci read, protoze to zpusobi cekani na<br>>     konec
<br>>     >     radku/souboru. Jak tedy provest kontrolu toho, ze muzu neco<br>>     cist a<br>>     >     pak<br>>     >     to teprve nacist.<br>>     ><br>>     >     Dalsi dotaz je podobny. Kdybych presmeroval vystup externiho
<br>>     >     programu do<br>>     >     souboru a v pythonu pak z toho souboru cetl, tak fungovalo<br>>     by to? Tedy<br>>     >     ja bych programu neco poslal, on by to vypsal do souboru a<br>
>     ja bych<br>>     >     ten<br>>     >     soubor prubezne cetl? Resp. jak bych ho mel cist?<br>>     ><br>>     >     Diky za odpoved, snad jsem to napsal srozumitelne.<br>>     ><br>
>     >     Karel<br>>     >     _______________________________________________<br>>     >     Tutor mailing list<br>>     >     <a href="mailto:Tutor@py.cz">Tutor@py.cz</a> <mailto:<a href="mailto:Tutor@py.cz">
Tutor@py.cz</a>> <mailto:<a href="mailto:Tutor@py.cz">Tutor@py.cz</a><br>>     <mailto:<a href="mailto:Tutor@py.cz">Tutor@py.cz</a>>><br>>     >     <a href="http://www.py.cz/mailman/listinfo/tutor">
http://www.py.cz/mailman/listinfo/tutor</a><br>>     ><br>>     ><br>>     ><br>>     ------------------------------------------------------------------------<br>><br>>     ><br>>     > _______________________________________________
<br>>     > Tutor mailing list<br>>     > <a href="mailto:Tutor@py.cz">Tutor@py.cz</a> <mailto:<a href="mailto:Tutor@py.cz">Tutor@py.cz</a>><br>>     > <a href="http://www.py.cz/mailman/listinfo/tutor">
http://www.py.cz/mailman/listinfo/tutor</a><br>>     <<a href="http://www.py.cz/mailman/listinfo/tutor">http://www.py.cz/mailman/listinfo/tutor</a>><br>><br>>     _______________________________________________
<br>>     Tutor mailing list<br>>     <a href="mailto:Tutor@py.cz">Tutor@py.cz</a> <mailto:<a href="mailto:Tutor@py.cz">Tutor@py.cz</a>><br>>     <a href="http://www.py.cz/mailman/listinfo/tutor">http://www.py.cz/mailman/listinfo/tutor
</a><br>>     <<a href="http://www.py.cz/mailman/listinfo/tutor">http://www.py.cz/mailman/listinfo/tutor</a>><br>><br>><br>> ------------------------------------------------------------------------<br>>
<br>> _______________________________________________<br>> Tutor mailing list<br>> <a href="mailto:Tutor@py.cz">Tutor@py.cz</a><br>> <a href="http://www.py.cz/mailman/listinfo/tutor">http://www.py.cz/mailman/listinfo/tutor
</a><br><br>_______________________________________________<br>Tutor mailing list<br><a href="mailto:Tutor@py.cz">Tutor@py.cz</a><br><a href="http://www.py.cz/mailman/listinfo/tutor">http://www.py.cz/mailman/listinfo/tutor
</a><br></blockquote></div><br>