Sorry, dosli mi napady :) return code 0 je ok, znaci to, ze aplikacia skoncila 
v poriadku. Bohuzial neviem preco sa nedostanes k vystupu, s modulom subprocess 
som zatial nemal ziadny problem (ale robim len na linuxe).



>-----Pôvodná správa-----
>Od: Radek Hol [mailto:[email protected]]
>Komu: Konference PyCZ <[email protected]>
>Predmet: Re: [python] Problém s subprocess
>
>
>Aha, pardon.
>
>Tak to mi připadá zajímavé:
>
>-------------------------------------------------------------------------
>>>> javac = subprocess.call(command, stdout=sys.stdout, stderr=sys.stderr)
>(Hláška "javac.exe" se NEvypíše.)
>-------------------------------------------------------------------------
>>>> javac = subprocess.call(command, stdout=sys.stdout, stderr=sys.stderr)
>>>> print javac
>0
>(Hláška "javac.exe" se NEvypíše.)
>-------------------------------------------------------------------------
>
>Děkuji, Radek
>
>
>
>2010/3/15 azurIt <[email protected]>:
>> pozor, ja som pouzil funkciu call(), nie Popen():
>>
>>>>> import subprocess
>>>>> help(subprocess.call)
>>
>>
>>>-----Pôvodná správa-----
>>>Od: Radek Hol [mailto:[email protected]]
>>>Komu: Konference PyCZ <[email protected]>
>>>Predmet: Re: [python] Problém s subprocess
>>>
>>>
>>>Stejné: :-(
>>>
>>>-------------------------------------------------------------------------
>>>>>> javac = subprocess.Popen(command, stdout=sys.stdout, stderr=sys.stderr)
>>>(Hláška "javac.exe" se vypíše.)
>>>-------------------------------------------------------------------------
>>>>>> javac = subprocess.Popen(command, stdout=sys.stdout, stderr=sys.stderr)
>>>>>> print javac.communicate()
>>>(None, None)
>>>(Hláška "javac.exe" se NEvypíše.)
>>>-------------------------------------------------------------------------
>>>>>> javac = subprocess.Popen(command, stdout=sys.stdout, stderr=sys.stderr)
>>>>>> print javac
>>><subprocess.Popen object at 0x013E7AD0>
>>>(Hláška "javac.exe" se vypíše.)
>>>-------------------------------------------------------------------------
>>>>>> javac = subprocess.Popen(command, stdout=sys.stdout, stderr=sys.stderr)
>>>>>> print javac.communicate()
>>>(None, None)
>>>>>> print javac
>>><subprocess.Popen object at 0x013E7AD0>
>>>(Hláška "javac.exe" se NEvypíše.)
>>>-------------------------------------------------------------------------
>>>
>>>Tak mě napadlo, kvůli chování, které jsem popsal v předchozím
>>>příspěvku (a kvůli tomu promptu při mému pokusu z příkazové řádky),
>>>jestli "javac.exe" na kontrolu syntaxe (a možná i "překlad"), nemůže
>>>volat ještě nějaký další proces a ten končí až po tomto...
>>>
>>>
>>>2010/3/14 azurIt <[email protected]>:
>>>> Skus este toto:
>>>>
>>>> import subprocess, sys
>>>> javac = subprocess.call(["C:\\java\\bin\\javac.exe", "Main.java", "-d", 
>>>> "."], stdout=sys.stdout, stderr=sys.stderr)
>>>> print javac
>>>>
>>>>
>>>>>-----Pôvodná správa-----
>>>>>Od: Radek Hol [mailto:[email protected]]
>>>>>Komu: Konference PyCZ <[email protected]>
>>>>>Predmet: Re: [python] Problém s subprocess
>>>>>
>>>>>
>>>>>Něco jiného než Javu, jsem nezkoušel spustit.
>>>>>Pokud i po tom, co teď napíšu, budeš myslet, že to mám zkusit, můžu...
>>>>>Zajímavá věc totiž je, že pokud spustím jen:
>>>>>
>>>>>------------------------------------------------
>>>>>...
>>>>>javac = subprocess.Popen(u"C:\\java\\bin\\javac.exe")
>>>>>javac.communicate()
>>>>>------------------------------------------------
>>>>>
>>>>>tak se výpis ("usage") vypíše, i když tam je "communicate()". Takže to
>>>>>vypadá, že za to může asi "javac.exe", že? Ale jak to může fungovat?
>>>>>
>>>>>Argumenty dávám ve stringu. Ale teď jsem zkusil
>>>>>
>>>>>------------------------------------------------
>>>>>...
>>>>>javac = subprocess.Popen(["C:\\java\\bin\\javac.exe", "Main.java", "-d", 
>>>>>"."])
>>>>>javac.communicate()
>>>>>------------------------------------------------
>>>>>
>>>>>i
>>>>>
>>>>>------------------------------------------------
>>>>>...
>>>>>>>> javac = subprocess.Popen(["C:\\java\\bin\\javac.exe", "Main.java", 
>>>>>>>> "-d", "."], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>>>>>>> while True:
>>>>>>>>     data = javac.stdout.read()
>>>>>>>>     print [data]
>>>>>>>>     if not data: break
>>>>>------------------------------------------------
>>>>>
>>>>>a dopadlo to stejně jako se stringem.
>>>>>
>>>>>Děkuji, Radek
>>>>>
>>>>>
>>>>>
>>>>>2010/3/14 azurIt <[email protected]>:
>>>>>> Argumenty davas v liste ? Skusal si pustat aj nieco ine ako javu ?
>>>>>>
>>>>>>
>>>>>>>-----Pôvodná správa-----
>>>>>>>Od: Radek Hol [mailto:[email protected]]
>>>>>>>Komu: Konference PyCZ <[email protected]>
>>>>>>>Predmet: Re: [python] Problém s subprocess
>>>>>>>
>>>>>>>
>>>>>>>Tak to dopadne takto:
>>>>>>>
>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>> javac = subprocess.Popen(command, stdout=subprocess.PIPE, 
>>>>>>>>>> stderr=subprocess.STDOUT)
>>>>>>>>>> while True:
>>>>>>>>>>     data = javac.stdout.read()
>>>>>>>>>>     print [data]
>>>>>>>>>>     if not data: break
>>>>>>>['']
>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>-------------------------------------------------------------------------
>>>>>>>
>>>>>>>Děkuju, Radek
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>2010/3/14 azurIt <[email protected]>:
>>>>>>>> Pardon, ta tvoja aplikacia ma aj argumenty (som robil len copy&paste a 
>>>>>>>> nepozeral, co tam je):
>>>>>>>>
>>>>>>>> javac = subprocess.Popen(args=["C:\\java\\bin\\javac.exe", 
>>>>>>>> "Main.java", "-d", "."], stdout=subprocess.PIPE, 
>>>>>>>> stderr=subprocess.STDOUT)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>-----Pôvodná správa-----
>>>>>>>>>Od: azurIt [mailto:[email protected]]
>>>>>>>>>Komu: [email protected]
>>>>>>>>>Predmet: Re: [python] Problém s subprocess
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>A toto ?
>>>>>>>>>
>>>>>>>>>import subprocess
>>>>>>>>>javac = subprocess.Popen(args=["C:\\java\\bin\\javac.exe Main.java -d 
>>>>>>>>>."], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>>>>>>>>
>>>>>>>>>while True:
>>>>>>>>>data = javac.stdout.read()
>>>>>>>>>print [data]
>>>>>>>>>if not data: break
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>-----Pôvodná správa-----
>>>>>>>>>>Od: Radek Hol [mailto:[email protected]]
>>>>>>>>>>Komu: Konference PyCZ <[email protected]>
>>>>>>>>>>Predmet: Re: [python] Problém s subprocess
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>Právě jsem zkusil tyto dvě varianty v systémovém příkazovém řádku
>>>>>>>>>>(python MakeJar.py) a dopadlo to stejně:
>>>>>>>>>>
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>(Hláška "javac.exe" se vypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>> print javac.communicate()
>>>>>>>>>>(None, None)
>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>>Možná by pomohlo to, že při první variantě to vypadá tak, že se spustí
>>>>>>>>>>můj program. Program skončí. Vypíše se "command line prompt" ("C:\>").
>>>>>>>>>>A teprve potom se vypíše hláška od "javac.exe".
>>>>>>>>>>Mám zkoušet i ostatní varianty spustit z příkazového řádku?
>>>>>>>>>>Předpokládam, že to není nutné...
>>>>>>>>>>
>>>>>>>>>>Dále jsem zjistil, že když spustím první variantu (bez
>>>>>>>>>>"communicate()") a na konec program přidám ještě třeba jen jednoduché
>>>>>>>>>>"print "a"" (i několikrát), tak se výpis "javac.exe" vypíše. Pokud ale
>>>>>>>>>>na konec dám např. "time.sleep()" nebo třeba "shutil.copytree()" (na
>>>>>>>>>>nějaký větší adresář), tak se výpis nevypíše.
>>>>>>>>>>
>>>>>>>>>>Další metody subprocess dopadly takto:
>>>>>>>>>>
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>> print javac.returncode
>>>>>>>>>>None
>>>>>>>>>>(Hláška "javac.exe" se vypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>> print javac.returncode
>>>>>>>>>>None
>>>>>>>>>>(Hláška "javac.exe" se vypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>> print javac.communicate()
>>>>>>>>>>(None, None)
>>>>>>>>>>>>> print javac.returncode
>>>>>>>>>>0
>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>> print javac.poll()
>>>>>>>>>>None
>>>>>>>>>>(Hláška "javac.exe" se vypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>> print javac.communicate()
>>>>>>>>>>(None, None)
>>>>>>>>>>>>> print javac.poll()
>>>>>>>>>>0
>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>> print javac.wait()
>>>>>>>>>>0
>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>> print javac.communicate()
>>>>>>>>>>(None, None)
>>>>>>>>>>>>> print javac.wait()
>>>>>>>>>>0
>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>>Děkuji, Radek
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>2010/3/13 azurIt <[email protected]>:
>>>>>>>>>>> Skusal si to pustat mimo PyDev ?
>>>>>>>>>>>
>>>>>>>>>>> To, ako sa ti to sprava, je vcelku zvlastne, pretoze ked zavolas 
>>>>>>>>>>> communicate(), tak subprocess pocka na dokoncenie programu (nie je 
>>>>>>>>>>> teda mozne, ze ten skonci az po skonceni skriptu). Skus este 
>>>>>>>>>>> funkcie/premenne stadeto:
>>>>>>>>>>> http://docs.python.org/release/2.5.4/lib/node532.html
>>>>>>>>>>>
>>>>>>>>>>> Hlavne wait(), poll() a returncode.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>-----Pôvodná správa-----
>>>>>>>>>>>>Od: Radek Hol [mailto:[email protected]]
>>>>>>>>>>>>Komu: Konference PyCZ <[email protected]>
>>>>>>>>>>>>Predmet: Re: [python] Problém s subprocess
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>Děkuju za odpověď.
>>>>>>>>>>>>Předtím jsem si experimentálně ověřil, že bez přesměrování se to 
>>>>>>>>>>>>také
>>>>>>>>>>>>vypisuje na stdout, stderr.
>>>>>>>>>>>>Pro jistotu uvádím výsledky různých možností:
>>>>>>>>>>>>
>>>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>(Hláška "javac.exe" se vypíše.)
>>>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>>>> javac = subprocess.Popen(command)
>>>>>>>>>>>>>>> print javac.communicate()
>>>>>>>>>>>>(None, None)
>>>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>>>> javac = subprocess.Popen(command, stdout=subprocess.PIPE, 
>>>>>>>>>>>>>>> stderr=subprocess.PIPE)
>>>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>>>> javac = subprocess.Popen(command, stdout=subprocess.PIPE, 
>>>>>>>>>>>>>>> stderr=subprocess.PIPE)
>>>>>>>>>>>>>>> print javac.communicate()
>>>>>>>>>>>>('', '')
>>>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>>>> javac = subprocess.Popen(command, stdout=sys.stdout, 
>>>>>>>>>>>>>>> stderr=sys.stderr)
>>>>>>>>>>>>(Hláška "javac.exe" se vypíše.)
>>>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>>>> javac = subprocess.Popen(command, stdout=sys.stdout, 
>>>>>>>>>>>>>>> stderr=sys.stderr)
>>>>>>>>>>>>>>> print javac.communicate()
>>>>>>>>>>>>(None, None)
>>>>>>>>>>>>(Hláška "javac.exe" se NEvypíše.)
>>>>>>>>>>>>-------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>>Navíc by to bohužel neřešilo ten druhý podstatnější problém, že se 
>>>>>>>>>>>>mi
>>>>>>>>>>>>soubor (Main.class) vytvoří až po skončení mého programu.
>>>>>>>>>>>>
>>>>>>>>>>>>Pro jistotu uvádím, že testuji v prostředí PyDev.
>>>>>>>>>>>>
>>>>>>>>>>>>Děkuji, Radek
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>2010/3/13 azurIt <[email protected]>:
>>>>>>>>>>>>> subprocess predsa plne podporuje presmerovanie standardneho aj 
>>>>>>>>>>>>> chyboveho vystupu (hint: stdout, stderr):
>>>>>>>>>>>>> http://docs.python.org/release/2.5.4/lib/node528.html
>>>>>>>>>>>>>
>>>>>>>>>>>>> Priklad:
>>>>>>>>>>>>>
>>>>>>>>>>>>> import subprocess
>>>>>>>>>>>>> javac = subprocess.Popen(args=["C:\\java\\bin\\javac.exe 
>>>>>>>>>>>>> Main.java -d ."], stdout=subprocess.PIPE, 
>>>>>>>>>>>>> stderr=subprocess.STDOUT)
>>>>>>>>>>>>> print javac.communicate()
>>>>>>>>>>>>>
>>>>>>>>>>>>> azur
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>>-----Pôvodná správa-----
>>>>>>>>>>>>>>Od: Radek Hol [mailto:[email protected]]
>>>>>>>>>>>>>>Komu: Konference PyCZ <[email protected]>
>>>>>>>>>>>>>>Predmet: [python] Problém s subprocess
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>Ahoj,
>>>>>>>>>>>>>>chtěl bych se Vás zeptat, zda byste mi neuměli poradit s mým 
>>>>>>>>>>>>>>problémem
>>>>>>>>>>>>>>s voláním externího programu.
>>>>>>>>>>>>>>Používám Python 2.5.4 (věřím, že kvůli kompatibilitě s Jython 
>>>>>>>>>>>>>>2.5.1)
>>>>>>>>>>>>>>na Windows 7.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>Snažím se o spuštění "překladače" "javac.exe":
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>------------------------------------------------
>>>>>>>>>>>>>>...
>>>>>>>>>>>>>>javac = subprocess.Popen(u"C:\\java\\bin\\javac.exe Main.java -d 
>>>>>>>>>>>>>>.")
>>>>>>>>>>>>>>javac.communicate()
>>>>>>>>>>>>>>------------------------------------------------
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>Zjistil jsem ale, že takto volaný externí program (nebo alepoň
>>>>>>>>>>>>>>"javac.exe") s následným voláním "communicate()" (ale nemusí to 
>>>>>>>>>>>>>>být
>>>>>>>>>>>>>>jen volání této metody - může to být jakýkoliv další kód) mi 
>>>>>>>>>>>>>>nevypíše
>>>>>>>>>>>>>>na chybový výstup žádné informace (pokud je chyba v "Main.java"), 
>>>>>>>>>>>>>>i
>>>>>>>>>>>>>>když při volání ze systémové příkazové řádky se informace vypíší.
>>>>>>>>>>>>>>Dále jsem zjistil, že když můj program skončí ihned po
>>>>>>>>>>>>>>"...subprocess.Popen..." (tedy vynechám "communicate()"), tak se 
>>>>>>>>>>>>>>na
>>>>>>>>>>>>>>chybový výstup vypíše, co má. Jenže já tímto samozřejmě nechci
>>>>>>>>>>>>>>končit...
>>>>>>>>>>>>>>Zkoušel jsem i použití funkce "time.sleep()", ale bez úspěchu.
>>>>>>>>>>>>>>Pokud v "Main.java" chyba není, má "javac.exe" vygenerovat soubor
>>>>>>>>>>>>>>"Main.class", jenže chování je podobné... Tedy, pokud se pod 
>>>>>>>>>>>>>>voláním
>>>>>>>>>>>>>>"javac.exe" vyskytuje ještě další kód, soubor "Main.class" se
>>>>>>>>>>>>>>vygeneruje až po skončení mého programu. (Ověřeno pomocí
>>>>>>>>>>>>>>"os.path.exists()" i "os.listdir()")
>>>>>>>>>>>>>>Přitom návratový kód je již nastaven...
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>Předem děkuji za pomoc, Radek Holý
>>>>>>>>>>>>>>_______________________________________________
>>>>>>>>>>>>>>Python mailing list
>>>>>>>>>>>>>>[email protected]
>>>>>>>>>>>>>>http://www.py.cz/mailman/listinfo/python
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Python mailing list
>>>>>>>>>>>>> [email protected]
>>>>>>>>>>>>> http://www.py.cz/mailman/listinfo/python
>>>>>>>>>>>>>
>>>>>>>>>>>>_______________________________________________
>>>>>>>>>>>>Python mailing list
>>>>>>>>>>>>[email protected]
>>>>>>>>>>>>http://www.py.cz/mailman/listinfo/python
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Python mailing list
>>>>>>>>>>> [email protected]
>>>>>>>>>>> http://www.py.cz/mailman/listinfo/python
>>>>>>>>>>>
>>>>>>>>>>_______________________________________________
>>>>>>>>>>Python mailing list
>>>>>>>>>>[email protected]
>>>>>>>>>>http://www.py.cz/mailman/listinfo/python
>>>>>>>>>_______________________________________________
>>>>>>>>>Python mailing list
>>>>>>>>>[email protected]
>>>>>>>>>http://www.py.cz/mailman/listinfo/python
>>>>>>>> _______________________________________________
>>>>>>>> Python mailing list
>>>>>>>> [email protected]
>>>>>>>> http://www.py.cz/mailman/listinfo/python
>>>>>>>>
>>>>>>>_______________________________________________
>>>>>>>Python mailing list
>>>>>>>[email protected]
>>>>>>>http://www.py.cz/mailman/listinfo/python
>>>>>> _______________________________________________
>>>>>> Python mailing list
>>>>>> [email protected]
>>>>>> http://www.py.cz/mailman/listinfo/python
>>>>>>
>>>>>_______________________________________________
>>>>>Python mailing list
>>>>>[email protected]
>>>>>http://www.py.cz/mailman/listinfo/python
>>>> _______________________________________________
>>>> Python mailing list
>>>> [email protected]
>>>> http://www.py.cz/mailman/listinfo/python
>>>>
>>>_______________________________________________
>>>Python mailing list
>>>[email protected]
>>>http://www.py.cz/mailman/listinfo/python
>> _______________________________________________
>> Python mailing list
>> [email protected]
>> http://www.py.cz/mailman/listinfo/python
>>
>_______________________________________________
>Python mailing list
>[email protected]
>http://www.py.cz/mailman/listinfo/python
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem