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

Odpovedet emailem