[python] Problém s subprocess

Radek Holý radekholypublic na gmail.com
Sobota Březen 13 19:21:13 CET 2010


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ý


Další informace o konferenci Python