[Python] Os.popen e comando route add
Giampaolo Rodolà
g.rodola a gmail.com
Lun 17 Gen 2011 12:47:21 CET
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 peṛ
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.lobos a 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 a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
Maggiori informazioni sulla lista
Python