<br><br><div><span class="gmail_quote">On 10/10/06, <b class="gmail_sendername">Karel Srot</b> &lt;<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz</a>&gt; 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 &quot;soubor v pameti&quot; - 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>&gt; myslim, ze budem muset komunikovat konkretneji - rozepis se vice o
<br>&gt; problemu<br>&gt;<br>&gt; std vstup i vystup si muzes predstavit jako normalni soubor -<br>&gt; funkce print napr. posila svuj vystup na stdout - nastavenim stdout do<br>&gt; souboru bude do neho zapsan vsechen std vystup, ktery bude vysledkem
<br>&gt; souboru spusteneho napr. pomoci execfile()<br>&gt;<br>&gt; stejne by mel fungovat i stdin, ze ktereho bude externi program cist<br>&gt; tak, jako bychom to psali pomoci klavesnice - je-li tedy ocekavam<br>&gt; vstup pomoci raw_input(), bude tento nacten defaultne ze 
sys.stdin.read()<br>&gt;<br>&gt; Problem ktery popisujes ty ale spise vypada na to, ze chces, aby dva<br>&gt; programy komunikovaly pomoci &quot;roury&quot;, coz by se mnout naznacenym<br>&gt; zpusobem melo taky dat realizovat.
<br>&gt; J.<br>&gt;<br>&gt; On 10/10/06, *Karel Srot* &lt;<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz</a><br>&gt; &lt;mailto:<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz
</a>&gt;&gt; wrote:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Asi jsem to nepochopil. Tim sys.stdout mohu napriklad nastavit, aby<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; standardni vystup meho programu sel do souboru. Ale ja chci<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; zpracovavat<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; vystup externiho programu, ktery z programu teprve poustim. To jde
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; takto<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; take? A jak tedy nastavim vstup/vystup pro externi program?<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Karel<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Jiří Popek napsal(a):<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; k tomu slouzi<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; import sys
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; sys.stdout<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; sys.stderr<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; sys.stdin<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; temto objektum muzes priradit napr. StringIO objekt nebo nejaky<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; soubor<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; a tvuj program ktery spoustis jej bude pouzivat jako klasicky
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; vystup/vstup. Na konci nezapomen nastavit tyto hodnoty na puvodni.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; J.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; On 10/10/06, *Karel Srot* &lt; <a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz
</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mailto:<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz</a>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; &lt;mailto:<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz
</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mailto:<a href="mailto:karel.do.pekla.zajel@seznam.cz">karel.do.pekla.zajel@seznam.cz</a>&gt;&gt;&gt; wrote:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Zdravim vsechny,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; mam nasledujici dotaz. zkousel jsem najit odpoved v nejake
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; dokumentaci<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; ci prikladech, ale jsem z toho tulpachovej.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Mam externi program. Ten chci z pythonu spustit, posilat mu<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; neco na<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; vstup a prebirat vystup. Zatim jsem pouzil funkci popen4.
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Vim, ze<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; vhodnejsi by bylo pouzit modul subprocess, ale v tom se moc<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; neorientuju.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Navic mi jde o to, najit funkcni reseni a pochopit ho,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; takze klidne
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; piste reseni pomoci subprocess.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Problem je v tom, ze ten program ne vzdy da vystup. Takze ja<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; mu muzu<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; poslat data a on nemusi vubec odpoved. Upravit tento program
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; nelze,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; proste to tak funguje. Jak zjistim, ze program neco poslal<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; na vystup?<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Nelze pouzit readline ci read, protoze to zpusobi cekani na<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; konec
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; radku/souboru. Jak tedy provest kontrolu toho, ze muzu neco<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; cist a<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; pak<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; to teprve nacist.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Dalsi dotaz je podobny. Kdybych presmeroval vystup externiho
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; programu do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; souboru a v pythonu pak z toho souboru cetl, tak fungovalo<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; by to? Tedy<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; ja bych programu neco poslal, on by to vypsal do souboru a<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; ja bych<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; ten<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; soubor prubezne cetl? Resp. jak bych ho mel cist?<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Diky za odpoved, snad jsem to napsal srozumitelne.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Karel<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; _______________________________________________<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Tutor mailing list<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; <a href="mailto:Tutor@py.cz">Tutor@py.cz</a> &lt;mailto:<a href="mailto:Tutor@py.cz">
Tutor@py.cz</a>&gt; &lt;mailto:<a href="mailto:Tutor@py.cz">Tutor@py.cz</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mailto:<a href="mailto:Tutor@py.cz">Tutor@py.cz</a>&gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.py.cz/mailman/listinfo/tutor">
http://www.py.cz/mailman/listinfo/tutor</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; _______________________________________________
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; Tutor mailing list<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; <a href="mailto:Tutor@py.cz">Tutor@py.cz</a> &lt;mailto:<a href="mailto:Tutor@py.cz">Tutor@py.cz</a>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; <a href="http://www.py.cz/mailman/listinfo/tutor">
http://www.py.cz/mailman/listinfo/tutor</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<a href="http://www.py.cz/mailman/listinfo/tutor">http://www.py.cz/mailman/listinfo/tutor</a>&gt;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; _______________________________________________
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Tutor mailing list<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; <a href="mailto:Tutor@py.cz">Tutor@py.cz</a> &lt;mailto:<a href="mailto:Tutor@py.cz">Tutor@py.cz</a>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.py.cz/mailman/listinfo/tutor">http://www.py.cz/mailman/listinfo/tutor
</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<a href="http://www.py.cz/mailman/listinfo/tutor">http://www.py.cz/mailman/listinfo/tutor</a>&gt;<br>&gt;<br>&gt;<br>&gt; ------------------------------------------------------------------------<br>&gt;
<br>&gt; _______________________________________________<br>&gt; Tutor mailing list<br>&gt; <a href="mailto:Tutor@py.cz">Tutor@py.cz</a><br>&gt; <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>