Re: [python] python subprocess vraci porad 1
On 01/21/2010 11:52 AM, Jan Jakubuv wrote: zdravim, On Thu, Jan 21, 2010 at 09:44:55AM +0100, Tomas Pelka wrote: Dobry napad, predelal sem tedy na: -- cmd = "/usr/bin/locate" arg1 = " -i" arg2 = " -d /var/www/books/mlocate.db" arg3 = str(" " + pattern) Chyba je formatu argumentu arg1, atd. Ta mezera na zacatku tam nesmi byt. Zkuste: arg1 = "-i" arg2a = "-d" arg2a = "/var/www/books/mlocate.db" arg3 = str(pattern) p1 = subprocess.Popen([cmd, arg1, arg2a, arg2b, arg3], shell=False, ...) Zbytek uz je spravne, pokud argumenty predavate jako list pak je skutecne treba zadat je oddelene. Pokud chcete zadat prikaz jako jeden string pak pouzijte `shell=True` a namistu listu zadejte string: p1 = subprocess.Popen("/usr/bin/locate -i -d file pattern", shell=True, ...) (stdoutdata, stderrdata) = p1.communicate() print p1.returncode print "%s -- %s" % (stdoutdata, stderrdata) -- Ale stale vraci 1 a zadny vysledek. honza. Diky za radu ale stale se nedokazu dobrat nejakemu vysledku. Skript je vlastne CGI spoustene z apache, divne ale je, ze kdyz spustim z shellu: # su -s /bin/bash -c "/usr/bin/locate -i -d /var/www/books/mlocate.db python; echo $?" apache 0 --- tak vzdy dostanu 0 ale zadny vysledek, pritom CGI vraci 1. Kdyz to same spustim jako bezny uzivatel (ne apache) tak dostanu 0 a nenulovy tedy spravny vysledek. Problem s mlocate.db by byt nemel, protoze je citelny pro apache (ten je ve skupine books) a vlastne i pro ostatni, viz: # su -s /bin/bash -c "ls -l /var/www/books/mlocate.db" apache -rw-rw-r-- 1 tom books 1465653 Jan 20 13:33 /var/www/books/mlocate.db Cely CGI v priloze. -- Tom #!/usr/bin/python import cgi import cgitb; cgitb.enable() # for troubleshooting import subprocess import sys import os sys.stderr = sys.stdout command = "" result = "" stdoutdata = "" stderrdata = "" # Create instance of FieldStorage form = cgi.FieldStorage() # Get data from field 'pattern' pattern = form.getvalue('pattern', 'None') # Get data from field 're' re = form.getvalue('re') cmd = "/usr/bin/locate" arg1 = "-i" arg2a = "-d" arg2b = "/var/www/books/mlocate.db" arg3 = "-r" arg4 = str(pattern) p1 = None if re == "re": p1 = subprocess.Popen([cmd, arg1, arg2a, arg2b, arg3, arg4], shell=False, \ stdout=subprocess.PIPE, stderr=subprocess.PIPE) command = "%s %s %s %s %s %s" % (cmd, arg1, arg2a, arg2b, arg3, arg4) else: p1 = subprocess.Popen([cmd, arg1, arg2a, arg2b, arg4], shell=False, \ stdout=subprocess.PIPE, stderr=subprocess.PIPE) command = "%s %s %s %s %s " % (cmd, arg1, arg2a, arg2b, arg4) (stdoutdata, stderrdata) = p1.communicate() print "Content-type: text/html" print # debug print "UID: %i " % os.getuid() print "Search pattern: %s " % pattern print """stdout: %s stderr: %s """ % (stdoutdata, stderrdata) print "Return code: %i" % p1.returncode print """ Hledej v books Hledany vyraz: Hledat pomoci regularniho vyrazu? """ if p1.returncode == 0: if stdoutdata: result = stdoutdata else: result = "Nic takoveho sem nenasel :/" else: result = 'Chyba: \ index souboru je bud zastaraly nebo doslo \ k chybe pri vyhledavani.%s \ %s' % (command, stderrdata) print """ Hledany vyraz "%s" se nachazi v nasledujicich adresarich %s """ % (pattern, result) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] python subprocess vraci porad 1
zdravim, On Thu, Jan 21, 2010 at 09:44:55AM +0100, Tomas Pelka wrote: > Dobry napad, predelal sem tedy na: > > -- > cmd = "/usr/bin/locate" > arg1 = " -i" > arg2 = " -d /var/www/books/mlocate.db" > arg3 = str(" " + pattern) > Chyba je formatu argumentu arg1, atd. Ta mezera na zacatku tam nesmi byt. Zkuste: arg1 = "-i" arg2a = "-d" arg2a = "/var/www/books/mlocate.db" arg3 = str(pattern) p1 = subprocess.Popen([cmd, arg1, arg2a, arg2b, arg3], shell=False, ...) Zbytek uz je spravne, pokud argumenty predavate jako list pak je skutecne treba zadat je oddelene. Pokud chcete zadat prikaz jako jeden string pak pouzijte `shell=True` a namistu listu zadejte string: p1 = subprocess.Popen("/usr/bin/locate -i -d file pattern", shell=True, ...) > (stdoutdata, stderrdata) = p1.communicate() > > print p1.returncode > print "%s -- %s" % (stdoutdata, stderrdata) > -- > > Ale stale vraci 1 a zadny vysledek. > honza. -- Heriot-Watt University is a Scottish charity registered under charity number SC000278. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] python subprocess vraci porad 1
Dobry napad, predelal sem tedy na: -- cmd = "/usr/bin/locate" arg1 = " -i" arg2 = " -d /var/www/books/mlocate.db" arg3 = str(" " + pattern) p1 = subprocess.Popen([cmd, arg1, arg2, arg3], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdoutdata, stderrdata) = p1.communicate() print p1.returncode print "%s -- %s" % (stdoutdata, stderrdata) -- Ale stale vraci 1 a zadny vysledek. On 01/20/2010 09:44 PM, Koumes21 wrote: Nazdar, me napada akorat to, ze prvni parametr pro subprocess.Popen() by nemel vypadat jako [cmd, args], ale jako [cmd, arg1, arg2, ...], tedy ze jednotlive argumenty by nemely byt jen oddeleny mezerou, ale mely by byt samostatnymi prvky listu. Doufam, ze je to jasne a ze to pomuze (nezkousel jsem, jenom jsem si tohohle zrovna vsiml). K21 2010/1/20 Tomas Pelka: Zdravim konferenci, temer cely den se peru se subprocess. Problem me dela naledujici jednoducha konstrukce: -- import subprocess pattern = "python" cmd = "/usr/bin/locate" args = " -i -d /var/www/books/mlocate.db %s" % pattern p1 = subprocess.Popen([cmd, args], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdoutdata, stderrdata) = p1.communicate() print p1.returncode print "%s -- %s" % (stdoutdata, stderrdata) -- Takze cilem je spustit prikaz /usr/bin/locate -i -d /var/www/books/mlocate.db python v shellu tento prikaz vypise nenulovy vysledek a skonci s nulovym navratovym kodem. V pythonu konci s navratovym kodem "1" a " -- ". Netusim proc tomu tak je, ma nekdo nejaky napad. Dekuji. -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] python subprocess vraci porad 1
Nazdar, me napada akorat to, ze prvni parametr pro subprocess.Popen() by nemel vypadat jako [cmd, args], ale jako [cmd, arg1, arg2, ...], tedy ze jednotlive argumenty by nemely byt jen oddeleny mezerou, ale mely by byt samostatnymi prvky listu. Doufam, ze je to jasne a ze to pomuze (nezkousel jsem, jenom jsem si tohohle zrovna vsiml). K21 2010/1/20 Tomas Pelka : > Zdravim konferenci, > temer cely den se peru se subprocess. Problem me dela naledujici > jednoducha konstrukce: > > -- > import subprocess > > pattern = "python" > cmd = "/usr/bin/locate" > args = " -i -d /var/www/books/mlocate.db %s" % pattern > > p1 = subprocess.Popen([cmd, args], shell=False, stdout=subprocess.PIPE, > stderr=subprocess.PIPE) > (stdoutdata, stderrdata) = p1.communicate() > > print p1.returncode > print "%s -- %s" % (stdoutdata, stderrdata) > -- > > Takze cilem je spustit prikaz > /usr/bin/locate -i -d /var/www/books/mlocate.db python > v shellu tento prikaz vypise nenulovy vysledek a skonci s nulovym > navratovym kodem. V pythonu konci s navratovym kodem "1" a " -- ". > > Netusim proc tomu tak je, ma nekdo nejaky napad. > Dekuji. > > -- > Tom > > Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] python subprocess vraci porad 1
Zdravim konferenci, temer cely den se peru se subprocess. Problem me dela naledujici jednoducha konstrukce: -- import subprocess pattern = "python" cmd = "/usr/bin/locate" args = " -i -d /var/www/books/mlocate.db %s" % pattern p1 = subprocess.Popen([cmd, args], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdoutdata, stderrdata) = p1.communicate() print p1.returncode print "%s -- %s" % (stdoutdata, stderrdata) -- Takze cilem je spustit prikaz /usr/bin/locate -i -d /var/www/books/mlocate.db python v shellu tento prikaz vypise nenulovy vysledek a skonci s nulovym navratovym kodem. V pythonu konci s navratovym kodem "1" a " -- ". Netusim proc tomu tak je, ma nekdo nejaky napad. Dekuji. -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Subprocess, bash skript a zpracován í stdout v pythonu
Děkuji, na tohle bych sám dost těžko přišel. -- S pozdravem Martin Stiborský Jabber: [EMAIL PROTECTED] ICQ: 224-065-849 ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Subprocess, bash skript a zpracován í stdout v pythonu
zdravim, 2008/8/24 Martin Stiborský <[EMAIL PROTECTED]>: > Zdravím. > Hraju si se spuštěním bash skriptu z Pythonu, využívám k tomu modulu > subprocess. > Skriptík sem tam něco vypíše na stdout, já tyhle hlášky sice umím > sbírat do proměnné v pythonu, ale vypisovat je umím až když bash > skriptík dokončí svoji činnost. > Šlo by to udělat trochu "interaktivněji" ? Tedy hned jak něco skriptik > pošle ven přes echo, sebrat to Pythonem a hned s tím něco provést .. > pokud jsem vse dobre pochopil, tak problem co popisujete je zrejme ze se read zablokuje dokud neprecte veskery vstup ze skriptu. muzete pouzit neblokujici variantu read, tu v pythonu naleznete v modulu os jako funkci os.read. Funkce prijima dva argumenty: 1) file deskriptor (zjistije z file objektu metodou fileno) a 2) maximalni pocet bytu ktere je mozne precist. Funkce se zablokuje jen v okamziku kdy nejsou k dispozici *zadna* data; pokud jsou data k dispozici, tak je vrati neprodlene. Zablokovani v pripade zadnych dat muzete predejit pouzitim funkce select.select, ktera vam umozni zjistit zda-li jsou nejaka data k dispozici. Nejlepe snad mala ukazka: from subprocess import Popen, PIPE from select import select import os p = Popen("./test.sh", stdout=PIPE) s = True # to je mala finta, aby se while cyklus alespon jednou vykonal while s: (r,w,e) = select([p.stdout],[],[],0) if r: s = os.read(p.stdout.fileno(),23) # os.read vraci prazdny string v pripade konce vstupu print s Mozna budete spokojen i s verzi bez select: p = Popen("./test.sh", stdout=PIPE) s = True while s: s = os.read(p.stdout.fileno(),23) print s Jedina neprijemnost je s tim, ze musite zadavat maximalni pocet prectenych znaku a v pripade ze je vstup delsi, musite ho rucne skladat (tj. vstup je "nebufferovany"). S pozdavem, honza. > -- > S pozdravem > Martin Stiborský > > Jabber: [EMAIL PROTECTED] > ICQ: 224-065-849 > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Subprocess, bash skript a zpracován í stdout v pythonu
Zdravím. Hraju si se spuštěním bash skriptu z Pythonu, využívám k tomu modulu subprocess. Skriptík sem tam něco vypíše na stdout, já tyhle hlášky sice umím sbírat do proměnné v pythonu, ale vypisovat je umím až když bash skriptík dokončí svoji činnost. Šlo by to udělat trochu "interaktivněji" ? Tedy hned jak něco skriptik pošle ven přes echo, sebrat to Pythonem a hned s tím něco provést .. -- S pozdravem Martin Stiborský Jabber: [EMAIL PROTECTED] ICQ: 224-065-849 ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] subprocess, pipes
Dobrý den, udělal jsem si dva jednoducé prográmky abych si vyzkouše komunikaci mezi procesy. Jeden z nich jednoduše vypisuje to, co do něj napíšete: import sys while 1: c1=sys.stdin.read(1) sys.stdout.write(c1) sys.stdout.flush() Tento první jsem změnil na exe soubor modulem py2exe. Druhý program spustí ten první a posílá do něj to co uživatel napíše a to co se vrátí tiskne na obrazovku: import subprocess,sys,thread pipe = subprocess.Popen("server.exe", stdin=subprocess.PIPE, stdout=subprocess.PIPE) def reciever(): while 1: c1=pipe.stdout.read(1) sys.stdout.write(c1) thread.start_new(reciever,()) while 1: c1=sys.stdin.read(1) pipe.stdin.write(c1) Je mi jasné, že program není ještě dokončený, ale jde o princip. V tomto okamžiku vše správně funguje. Já bych ale potřeboval, aby se "server" nezapínal jako podproces, ale aby například oba programy zapnul uživatel a oni se sami poznaly a začaly spolu komunikovat. Kdyby někdo věděl a poradil mi, budu mu jistě vděčný. Koumes21 ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess
Ahoj, jakým způsobem by se to dalo zreprodukovat? Výjimku se mi nedaří vyvolat, ani když periodicky zkouším pouštět 'sleep' s různými čekacími dobami: #!/usr/bin/python import subprocess, random while True: t = str(random.randint(1, 5)) print t process = subprocess.Popen(['sleep', t]) retvalue = process.wait() Ani když vytvořím binárku, která by měla běžet co nejkratší dobu, tj. #include int main(void){ return 0; } a pak ji zkouším neustále spouštět #!/usr/bin/python import subprocess while True: process = subprocess.Popen(['./pokus']) retvalue = process.wait() tak výjimku nedostanu. Může to záviset na platformě? -- Jan Martinek Šponar Josef wrote: > Skript ověřuje zda jsou splněny podmínky pro spuštění externích programů. > Když jsou splněny podmínky, pokusí se vytvořit nový proces a testuje > návratovou hodnotu. > > V případě, že externí program běží více než cca.5sekund, tak je vše v > pořádku. Ale může se stát, že program běží kratší dobu a "někdy" to projde v > pořádku a "někdy" to skončí popisovanou chybou. > Zkoušel jsem i popen2, výsledek stejný. > > Používam takovouto konstrukci: > try: >process = subprocess.Popen([prog_name]) >retvalue = process.wait() >if retvalue: > print 'program se sice povedlo pustit, ale neco selhalo' >else: > print 'vse OK' > except OSError, error: >print 'nepovedlo se ho pustit' >print error > > > > > -Original Message- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Petr Nesládek > Sent: Thursday, August 23, 2007 11:42 PM > To: Konference PyCZ > Subject: Re: [python] subprocess > > >> Původní zpráva >> Od: Šponar Josef <[EMAIL PROTECTED]> >> Předmět: [python] subprocess >> Datum: 23.8.2007 13:18:06 >> >> >> Ahoj, nevíte někdo jak odstranit tuto podivnost při používání >> subprocess.wait(). >> PYTHON = 2.4 >> System = SunOS >> >> prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE) >> retval=prog.wait() >> >> Traceback (most recent call last): >> File "av_rizeni.py", line 283, in ? >> main() >> File "av_rizeni.py", line 180, in main >> retval=prog.wait() >> File "/usr/local/lib/python2.4/subprocess.py", line 1007, in wait >> pid, sts = os.waitpid(self.pid, 0) >> OSError: [Errno 10] No child processes >> ___ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/listinfo/python >> > > Ahoj, možná sezeptám hloupě, ale ten subproces se rozběhne, nebo ne ? > > Případně co se vůbec děje do momentu než zkončí chybou ? > > Petr > > > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess
Díky, to bude asi ono. Ale myslím si, že je problém v pythonu. -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jan Jakubuv Sent: Thursday, August 23, 2007 2:20 PM To: Konference PyCZ Subject: Re: [python] subprocess dobry den, co treba takto: prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE) try: retval=prog.wait() except IOError, (errorno, strerror): from errno import ECHILD if errorno == ECHILD: pass retvat = prog.returncode h. 2007/8/23, Šponar Josef <[EMAIL PROTECTED]>: > > Ahoj, nevíte někdo jak odstranit tuto podivnost při používání > subprocess.wait(). > PYTHON = 2.4 > System = SunOS > > prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE) > retval=prog.wait() > > Traceback (most recent call last): > File "av_rizeni.py", line 283, in ? > main() > File "av_rizeni.py", line 180, in main > retval=prog.wait() > File "/usr/local/lib/python2.4/subprocess.py", line 1007, in wait > pid, sts = os.waitpid(self.pid, 0) > OSError: [Errno 10] No child processes > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess
Skript ověřuje zda jsou splněny podmínky pro spuštění externích programů. Když jsou splněny podmínky, pokusí se vytvořit nový proces a testuje návratovou hodnotu. V případě, že externí program běží více než cca.5sekund, tak je vše v pořádku. Ale může se stát, že program běží kratší dobu a "někdy" to projde v pořádku a "někdy" to skončí popisovanou chybou. Zkoušel jsem i popen2, výsledek stejný. Používam takovouto konstrukci: try: process = subprocess.Popen([prog_name]) retvalue = process.wait() if retvalue: print 'program se sice povedlo pustit, ale neco selhalo' else: print 'vse OK' except OSError, error: print 'nepovedlo se ho pustit' print error -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Petr Nesládek Sent: Thursday, August 23, 2007 11:42 PM To: Konference PyCZ Subject: Re: [python] subprocess > Původní zpráva ---- > Od: Šponar Josef <[EMAIL PROTECTED]> > Předmět: [python] subprocess > Datum: 23.8.2007 13:18:06 > > > Ahoj, nevíte někdo jak odstranit tuto podivnost při používání > subprocess.wait(). > PYTHON = 2.4 > System = SunOS > > prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE) > retval=prog.wait() > > Traceback (most recent call last): > File "av_rizeni.py", line 283, in ? > main() > File "av_rizeni.py", line 180, in main > retval=prog.wait() > File "/usr/local/lib/python2.4/subprocess.py", line 1007, in wait > pid, sts = os.waitpid(self.pid, 0) > OSError: [Errno 10] No child processes > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > Ahoj, možná sezeptám hloupě, ale ten subproces se rozběhne, nebo ne ? Případně co se vůbec děje do momentu než zkončí chybou ? Petr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] subprocess
Ahoj, pro upřesnění: Tato chyba se vyskytne náhodně. Nelze napsat např: try: process = subprocess.Popen([prog_name]) retvalue = process.wait() if retvalue: print 'program se sice povedlo pustit, ale neco selhalo' else: print 'vse OK' except OSError, error: print 'nepovedlo se ho pustit' print error ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess
> Původní zpráva > Od: Šponar Josef <[EMAIL PROTECTED]> > Předmět: [python] subprocess > Datum: 23.8.2007 13:18:06 > > > Ahoj, nevíte někdo jak odstranit tuto podivnost při používání > subprocess.wait(). > PYTHON = 2.4 > System = SunOS > > prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE) > retval=prog.wait() > > Traceback (most recent call last): > File "av_rizeni.py", line 283, in ? > main() > File "av_rizeni.py", line 180, in main > retval=prog.wait() > File "/usr/local/lib/python2.4/subprocess.py", line 1007, in wait > pid, sts = os.waitpid(self.pid, 0) > OSError: [Errno 10] No child processes > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > Ahoj, možná sezeptám hloupě, ale ten subproces se rozběhne, nebo ne ? Případně co se vůbec děje do momentu než zkončí chybou ? Petr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess
dobry den, co treba takto: prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE) try: retval=prog.wait() except IOError, (errorno, strerror): from errno import ECHILD if errorno == ECHILD: pass retvat = prog.returncode h. 2007/8/23, Šponar Josef <[EMAIL PROTECTED]>: > > Ahoj, nevíte někdo jak odstranit tuto podivnost při používání > subprocess.wait(). > PYTHON = 2.4 > System = SunOS > > prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE) > retval=prog.wait() > > Traceback (most recent call last): > File "av_rizeni.py", line 283, in ? > main() > File "av_rizeni.py", line 180, in main > retval=prog.wait() > File "/usr/local/lib/python2.4/subprocess.py", line 1007, in wait > pid, sts = os.waitpid(self.pid, 0) > OSError: [Errno 10] No child processes > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] subprocess
Ahoj, nevíte někdo jak odstranit tuto podivnost při používání subprocess.wait(). PYTHON = 2.4 System = SunOS prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE) retval=prog.wait() Traceback (most recent call last): File "av_rizeni.py", line 283, in ? main() File "av_rizeni.py", line 180, in main retval=prog.wait() File "/usr/local/lib/python2.4/subprocess.py", line 1007, in wait pid, sts = os.waitpid(self.pid, 0) OSError: [Errno 10] No child processes ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess - komunikace s interaktivnim programem
On Tue, Apr 24, 2007 at 10:06:57AM +0200, kraliczek wrote: > Nelibi se mi, ze program linphonec(konsolovy SIP klient) pracuje > interaktivne, proto chci tento program obalit vlastni nadstavbou, ze > ktere se bude moc program ovladat pres parametry zadane pri spusteni > nadstavby. S jednoduchym ovladanim terminalovych interaktivnich programu pres stdin/stdout vetsinou nevystacite. Lezou z nich escape sekvence, vyzaduji pristup ke klavesam apod. Zkuste pexpect, ten je na takove veci delany. http://pexpect.sourceforge.net/ Radek Kaňovský ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess - komunikace s interaktivnim programem
kraliczek wrote: > Abych byl presnejsi, spousteny program s kterym komunikuji pres roury > vypisuje vsechny data na stdout Tak jeste muzes zkusit modul pty. Blesmrt, -jkt -- cd /local/pub && more beer > /dev/mouth signature.asc Description: OpenPGP digital signature ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess - komunikace s interaktivnim programem
> kraliczek wrote: > > Ahoj, Potreboval bych si napsat nadstavbu nad program, ktery > > komunikuje interaktivne pres stdin a stdout. Nasel jsem si knihovnu > > subprocess v pythonu. Komunikace na stdin toho spusteneho programu > > funguje, ale nejsem schopen vytahnout data, ktere ten program pise na > > stdout... > > Zkus si pohrat s bufferovanim. Pro os.popen() by to bylo asi tohle: > > (_w, _r) = os.popen2(command, bufsize=0) > > Modul subprocess nejspis bude umet neco podobneho. > > Hezky vecer, > -jkt > > -- > cd /local/pub && more beer > /dev/mouth > S bufferem jsem si zkousel pohrat. Abych byl presnejsi, spousteny program s kterym komunikuji pres roury vypisuje vsechny data na stdout (vyzkouseno pomoci: ./program > stdout.txt), Pres rouru pripojenou na stdout toho programu dostanu nejaka data, vypise mi priblizne ctyri radky a potom zustane stat (ikdyz na stdout bylo zcela urcite poslano vice textu). Tento text dostanu, az kdyz poslu parkrat znak '\n' na stdin pres rouru na nej napojenu. Ze by to mohl byt problem s bufferem mne taky napadlo, ale kdyz zadam bufsize=0 (coz by melo byti unbuffered) chova se to porad stejne :( Pro nazornost, od abstrankniho ke konkretnimu: Nelibi se mi, ze program linphonec(konsolovy SIP klient) pracuje interaktivne, proto chci tento program obalit vlastni nadstavbou, ze ktere se bude moc program ovladat pres parametry zadane pri spusteni nadstavby. Program jsem upravil pro testovanin roury nasledujicim zpusobem: pipe = subprocess.Popen('linphonec', stdin=subprocess.PIPE, stdout=subprocess.PIPE,bufsize=0) input = [pipe.stdout, sys.stdin] while 1: inputready, outputready, exceptready = select.select(input,[],[]) for i in inputready: if i == pipe.stdout: str = pipe.stdout.readline() print str, if i == sys.stdin: pipe.stdin.write(sys.stdin.readline()) Narazil jsem ale na to, ze program rucne inicializuji, a zadam prikaz pro volani. Vypise se mi jeste hlaska o tom, ze se zahajilo volani, ale uz se mi nevypise text, ze hovor byl prijat. - tento text ho donutim vypsat az kdyz zmacku enter (kdyz spustim primo linphonec, tak ty hlasky vypisuje bez problemu). ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess - komunikace s interaktivnim programem
kraliczek wrote: > Ahoj, Potreboval bych si napsat nadstavbu nad program, ktery > komunikuje interaktivne pres stdin a stdout. Nasel jsem si knihovnu > subprocess v pythonu. Komunikace na stdin toho spusteneho programu > funguje, ale nejsem schopen vytahnout data, ktere ten program pise na > stdout... Zkus si pohrat s bufferovanim. Pro os.popen() by to bylo asi tohle: (_w, _r) = os.popen2(command, bufsize=0) Modul subprocess nejspis bude umet neco podobneho. Hezky vecer, -jkt -- cd /local/pub && more beer > /dev/mouth signature.asc Description: OpenPGP digital signature ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] subprocess - komunikace s interaktivnim programem
Ahoj, Potreboval bych si napsat nadstavbu nad program, ktery komunikuje interaktivne pres stdin a stdout. Nasel jsem si knihovnu subprocess v pythonu. Komunikace na stdin toho spusteneho programu funguje, ale nejsem schopen vytahnout data, ktere ten program pise na stdout... from subprocess import * p = Popen('program', stdin=PIPE, stdout=PIPE) p.stdin.write('programe pipni\n') # spusteny program pipne a vypise hlaseni na stdout p.stdout.readline() Kdyz program po spusteni vypise na stdout nejake radky, tak je pomoci p.stdout.readline() jsem schopen vypsat, ale nevim jak zjistit, ze precteny radek je posledni a dal zatim neni co cist -> kdyz v teto chvili prikaz p.stdout.readline() spustim, zustane cekat a ikdyz na stdout program potom nejake data posle... (+ s tim souvisejici - jak prijmout data, ktera nekonci znakem noveho radku?) Mohl by mi nekdo poradit, jak na to/kde je chyba ? Diky ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess
Vladislav Ludík wrote: > Zdravím, > > jak odeslat v linuxu příkaz pomocí subprocess. > > V linuxu napíšu například: > > server:~# sendsms "číslo" "text" > > a ten mi přes nainstalovanou SMS bránu odešle "text" na zadané "číslo" > > Přes subprocess se mi to nedaří. > > Díky za radu import subprocess cmd = ['sendsms', 'cislo', 'text'] process = subprocess.Popen(cmd) a kdybys chtěl čekat na ukončení příkazu, tak ještě process.wait() Jo a je nutné to pouštět jako root? ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] subprocess
Zdravím, jak odeslat v linuxu příkaz pomocí subprocess. V linuxu napíšu například: server:~# sendsms "číslo" "text" a ten mi přes nainstalovanou SMS bránu odešle "text" na zadané "číslo" Přes subprocess se mi to nedaří. Díky za radu ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess v samostatnem okne
radek napsal(a): > To je sice hezke, chtel jsem tuto info dat i na py.cz > (http://www.py.cz/KonferenceDiskuze), ale nikde neni tlacitko Edit. Ja > myslel, ze to je wiki? Radek > je to půlwiki, kvůli nejen tureckým spamům snad ale časem bude líp nacionále jsou: pycz heslo -- geon Pavel Kosina ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess v samostatnem okne
To je sice hezke, chtel jsem tuto info dat i na py.cz (http://www.py.cz/KonferenceDiskuze), ale nikde neni tlacitko Edit. Ja myslel, ze to je wiki? Radek > Rozhrani ke konferencim najdete standardne na: > http://www.py.cz/mailman/listinfo/ ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess v samostatnem okne
On Tuesday 17 October 2006 10:42, radek wrote: > OK, takze uz je definitivne jenom jedna konfera. Fajn. Tutor archiv by > mohl byt nejak pristupny z py.cz. Fakt jde spatne najit. A mel by > nekdo odpoved na moji otazku? Konferenci jsem dosud nezrusil -- chtel jsem nechat dobehnout diskuzi a zapremyslet nad vsemi dusledky (migrovani clenu, reseni archivu atd.) Rozhrani ke konferencim najdete standardne na: http://www.py.cz/mailman/listinfo/ -- ViNiL Success is how you bounce on the bottom. -- General George S. Patton, Jr. pgpHmlp3B9Lba.pgp Description: PGP signature ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess v samostatnem okne
OK, takze uz je definitivne jenom jedna konfera. Fajn. Tutor archiv by mohl byt nejak pristupny z py.cz. Fakt jde spatne najit. A mel by nekdo odpoved na moji otazku? Diky, Radek On 10/17/06, Pavel Kosina <[EMAIL PROTECTED]> wrote: > radek napsal(a): > > Uf tak ted jsem z tech x konferenci zmateny. Kvuli nasledujicimu > > dotazu jsem se nahlasil do Tutor, nacez Tutor archiv uz ani nemohu > > nalezt na www.py.cz. > > > Byl jsem rychlejší než ViNiL ;-) Jinak se to ale stále dá najít, když se > > a/ podíváš do historie stránky - last edited _xx_ ago > b/ když budeš na přihlašovací stránce do konference python@py.cz, tak z > url řádky vymažeš python > > To jen pro info, jinak jsi tu správně. > > -- > geon > Pavel Kosina > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] subprocess v samostatnem okne
radek napsal(a): > Uf tak ted jsem z tech x konferenci zmateny. Kvuli nasledujicimu > dotazu jsem se nahlasil do Tutor, nacez Tutor archiv uz ani nemohu > nalezt na www.py.cz. > Byl jsem rychlejší než ViNiL ;-) Jinak se to ale stále dá najít, když se a/ podíváš do historie stránky - last edited _xx_ ago b/ když budeš na přihlašovací stránce do konference python@py.cz, tak z url řádky vymažeš python To jen pro info, jinak jsi tu správně. -- geon Pavel Kosina ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] subprocess v samostatnem okne
Uf tak ted jsem z tech x konferenci zmateny. Kvuli nasledujicimu dotazu jsem se nahlasil do Tutor, nacez Tutor archiv uz ani nemohu nalezt na www.py.cz. -- Forwarded message -- Ahoj, pokousim se udelat GUI spoustec ruznych aplikaci pomoci Pythonu a Tkinteru. Momentalne, kdyz pouziju subprocess.Popen("mycommand"), tak veskery vystup jde na stdout meho launcheru. Jenomze pro nektere command line applikace potřebuji, aby se spustily se samostanym "terminalovym" oknem. Jo, zkousim to na Woknech a OSX. Na woknech nemam opravneni soustet cmd (launcher ma byt na flashce). Jak na to? Diky, Radek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python