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

Odpovedet emailem