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
