[Python] Os.popen e comando route add
LuupuxAll
luupuxall a gmail.com
Lun 17 Gen 2011 13:14:23 CET
Grazie per la dritta
Il 17 gennaio 2011 12:47, Giampaolo Rodolą <g.rodola a 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.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
>>
>>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
Maggiori informazioni sulla lista
Python