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