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

Odpovedet emailem