2010-09-30 10 views
5

Estoy tratando de seguir la información que puedo encontrar sobre el subproceso. Como tengo ganas de hacer una llamada de línea de comandos de Linux ... Lo intento como a continuación, pero recibo el error "[Errno 2] No existe dicho archivo o directorio". No estoy intentando abrir un archivo, por lo que no entiendo este error, y funciona bien (aunque con otros problemas relacionados con la espera de que el proceso finalice cuando yo no lo desee) cuando uso un sistema operativo común .popen.Python, utilizando el subproceso.Popen para hacer una llamada de línea de comandos de Linux? Me estoy poniendo "[Errno 2] No existe ese archivo o directorio"

Parece que no puedo entender cómo hacerlo correctamente, cualquier consejo es apreciado.

EDITAR: EL COMANDO QUE ESTOY UTILIZANDO ES COMPLEJO Y VARIABLE, sería demasiado fuera de contexto incluirlo aquí, creo que es suficiente decir que el código funciona cuando uso os.popen y no cuando hago el nueva forma, así que no, la "línea de comandos de Linux llamada" obviamente no es la llamada que estoy usando

subprocess.Popen([r"linux command line call"]) 
>>> [Errno 2] No such file or directory 
+7

Es que, literalmente, el código se trató de correr? – zwol

+0

por supuesto que no (¿por qué incluso preguntaría esto?) Pero el código está variablizado y no tendría mucho sentido aquí sin contexto ... bien lo probaré con algún otro código básico y actualizaré la publicación – Rick

+0

no importa, alguien ya respondió la pregunta, a continuación, al parecer, fueron capaces de entender lo que quise decir – Rick

Respuesta

14
import subprocess  
proc=subprocess.Popen(['ls','-l']) # <-- Change the command here 
proc.communicate() 

Popen espera una lista de cadenas. La primera cadena es generalmente el programa que se ejecutará, seguido de sus argumentos. A veces, cuando se complica el comando, es conveniente utilizar shlex.split para componer la lista para usted:

import shlex 
proc=subprocess.Popen(shlex.split('ls -l')) 
proc.communicate() 
+0

se supone que siempre debe usar 'ls' y poner la llamada de línea de comando en la segunda parte? La otra forma con shlex que publicaste parece estar funcionando .. – Rick

+1

@Rick: 'ls' era solo un ejemplo; deberías reemplazarlo con cualquier comando real que intentes ejecutar. – unutbu

+0

Tengo 'subprocess.Popen (shlex.split ('ls -l'))' para trabajar con comandos básicos, como 'ls-l' pero para mi comando, que es para iniciar un servidor, todavía estoy obteniendo ' [Errno 2] No hay tal archivo o directorio ', cuando el mismo comando exacto funciona usando os.popen. Está demasiado fuera de contexto para entrar en la llamada de comando aquí (es para el servidor web de selenio), pero me pregunto si hay alguna diferencia en cuanto a lo que el sistema está recibiendo entre las diferentes formas de hacer las llamadas, ya que no puedo averiguar por qué está haciendo esto – Rick

Cuestiones relacionadas