[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