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

Odpovedet emailem