Grazie per la dritta
Il 17 gennaio 2011 12:47, Giampaolo Rodolà <g.rod...@gmail.com> ha scritto: > Spesso mi porto dietro questa funzione in molti script per fare lavori > sporchi/veloci: > > import subprocess, warnings > > def sh(cmdline): > """run cmd in a subprocess and return its output. > raises RuntimeError on error. > """ > p = subprocess.Popen(cmdline, shell=True, stdout=subprocess.PIPE, > stderr=subprocess.PIPE) > stdout, stderr = p.communicate() > if p.returncode != 0: > raise RuntimeError(stderr) > if stderr: > warnings.warn(stderr, RuntimeWarning) > return stdout > > >>> sh("whoami") > 'giampaolo\n' > >>> sh("blabla") > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "_utils.py", line 12, in sh > raise RuntimeError(stderr) > RuntimeError: /bin/sh: blabla: command not found > >>> > > A partire da python 2.7 puoi usare subprocess.check_output() che però > trovo meno comoda: > http://docs.python.org/library/subprocess.html#subprocess.check_output > > > --- Giampaolo > http://code.google.com/p/pyftpdlib/ > http://code.google.com/p/psutil/ > > > > Il 15 gennaio 2011 12:27, Paolo Bernardi <villa.lo...@tiscali.it> ha scritto: >> Tra le altre cose, se vuoi restare aggiornato, ti consiglio di dare >> un'occhiata al modulo subprocess, particolarmente alla sezione su come >> rimpiazzare le chiamate os.popen*: >> >> http://docs.python.org/library/subprocess.html#replacing-os-popen-os-popen2-os-popen3 >> >> Con la popen, ad esempio, mi è capitato di fare qualcosa di simile: >> >> p = subprocess.Popen(['axel', '-o', file, self.url], shell=False, >> stdout=subprocess.PIPE) >> line = p.stdout.readline() >> while line != None and line != '' and not p.poll(): >> [...] >> line = p.stdout.readline() >> >> In questo caso ovviamente mi serviva l'output riga per riga (man mano >> che axel avanzava), ma puoi anche leggere tutto in blocco. >> >> Paolo >> >> On Fri, 2011-01-14 at 12:03 +0100, Stefano Dal Pra wrote: >>> Ciao, >>> prova con os.popen3 : >>> stdin,stdou,stderr = os.popen("ping 151.1.1.1") >>> >>> dovresti scoprire che il SIOCADDRT compare con stderr.readline() ... >>> >>> Stefano >> >> _______________________________________________ >> Python mailing list >> Python@lists.python.it >> http://lists.python.it/mailman/listinfo/python >> >> > _______________________________________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python