examples example español python process python-2.6 raspberry-pi

example - subprocess python español



Llamando a la aplicación desde subprocess.call con argumentos (1)

No estás usando la llamada correcta. Mira la introducción o cualquiera de los ejemplos en los documentos. El primer argumento de la llamada es "args", una secuencia de argumentos, donde arg [0] es el programa que se ejecutará.

Entonces, cuando haces esto:

s.call("gpio -g read 17")

Hay dos maneras en que el subproceso podría interpretar esto. Debe ejecutar un programa llamado "g" con los argumentos "p", "i", "o", "", etc. (Recuerde, las cadenas son secuencias de caracteres). En su lugar, podría ejecutar un programa llamado "gpio -g read 17 "sin argumentos adicionales. De cualquier manera, no va a encontrar tal programa. (A menos que tenga un programa llamado "g" o "gpio -g lea 17" en su RUTA, en cuyo caso hará lo incorrecto en lugar de darle un error ...)

Lo que quieres es:

s.call(["gpio", "-g", "read", "17"])

Entonces, ¿por qué funciona esto si pasas shell=True ? Debido a que toda esta cadena se pasa al shell, que luego realiza su propio análisis de la línea de comandos y separa las cosas por espacios. Es como llamar a os.system("gpio -g read 17") .

Tenga en cuenta que todo lo anterior está un poco simplificado (ignora Windows y el análisis de shell no es solo "separado por espacios", etc.), por lo que debería leer la documentación. (Además, quien haya escrito los documentos de subprocess es mejor escritor que yo).

Soy un principiante en Python, y he estado tratando de llamar a una aplicación de línea de comandos, pero falla:

>>> import subprocess as s >>> s.call("gpio -g read 17") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.6/subprocess.py", line 470, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.6/subprocess.py", line 623, in __init__ errread, errwrite) File "/usr/lib/python2.6/subprocess.py", line 1141, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory

Pero entonces si agrego shell=True , todo comienza a funcionar. ¿Alguien puede explicar por qué?

>>> import subprocess as s >>> s.call("gpio -g read 17", shell=True) >>> 0