2010-11-03 8 views
16

solía poder hacer un subprocess.call(["command","-option value -option value"]) y funcionaría si hubiera un cambio en el comando para que funcione correctamente con comillas, pero ahora tengo que cambiar mi subproceso comando de llamada para que se vea así:subprocess.call requiriendo que todos los parámetros estén separados por comas

subprocess.call(["command","-option","value","-option","value"]) 

¿hay algo que pueda hacer para que vuelva a funcionar en python?

el os.system("command -option value -option value") funciona igual que antes.

Respuesta

2

Deberá especificar shell=True para obtener subprocess.call para interpretar la cadena.

Consulte la nota en el subprocess.Popen constructor documentation (el método subprocess.call toma los mismos argumentos que el constructor subprocess.Popen).

+0

bien, así que lo hice: subprocess.call ("comando "+" - opción de valor -option valor", shell = True) y funcionó. Gracias – Dag

33

Evite shell=True si puede - es un security risk. Para este fin, basta shlex.split:

import subprocess 
import shlex 
subprocess.call(shlex.split("command -option value -option value")) 
+0

¿es este mejor que el anterior? ¿hay algún beneficio de usar shelex? – Dag

+3

'shlex.split' crea una lista para usted, básicamente. Así que es más o menos equivalente a 'subprocess.call ([" comando "," - opción "," valor "," - opción "," valor "])' sin tener que escribir explícitamente el literal de la lista. – Santa

+5

@Dag: le permite evitar el uso de 'shell = True', que es un riesgo de seguridad. – unutbu

Cuestiones relacionadas