2011-12-20 6 views
5

Utilizo el siguiente comando en bash para ejecutar una secuencia de comandos de Python.Llamada de subproceso de Python con argumentos que tienen varias citas

python myfile.py -c "'USA'" -g "'CA'" -0 "'2011-10-13'" -1 "'2011-10-27'" 

Estoy escribiendo un script de Python para envolver este. Actualmente estoy teniendo que usar os.system (lo sé, es horrible) ya que no puedo entender cómo hacer para que las cotizaciones funcionen con el subproceso. Popen. Las comillas simples internas se deben mantener en las variables de cadena que se pasan.

¿Puede alguien ayudarme a determinar cómo formatear la primera variable pasada al subproceso? Popen.

Respuesta

4

Usted debe ser capaz de poner en marcha su guión con subprocess.Popen incluso con parámetros citados:

subprocess.Popen([ 
    "/usr/bin/python", 
    "myfile.py", 
    "-c", 
    "'USA'", 
    "-g", 
    "'CA'", 
    "-0", 
    "'2011-10-13'", 
    "-1", 
    "'2011-10-27'", 
]) 
0

¿Has probado esto?

import subprocess 
subprocess.Popen(['python', 'myfile.py', '-c', "'USA'", '-g', "'CA'", '-0', "'2011-10-13'", -1, "'2011-10-27'"]).communicate() 

Usted podría utilizar esto en myfile.py para comprobar que lo que se obtiene a partir bash es lo mismo que lo que se obtiene de subprocess.Popen (en mi caso de que coincide):

import sys 
print sys.argv 
8

No es necesario escapar de los valores Para el proceso, todo se pasa como una cadena.

Usted puede utilizar el módulo shlex de averiguar cuál es la mejor manera de pasar variables:

import shlex 
shlex.split('python myfile.py -c "USA" -g "CA" -0 "2011-10-13" -1 "2011-10-27"') 
['python', 
'myfile.py', 
'-c', 
'USA', 
'-g', 
'CA', 
'-0', 
'2011-10-13', 
'-1', 
'2011-10-27'] 
+0

Este es el preferido OneWayToDoIt (tm). –

+0

Tenga en cuenta que esto no funciona en entornos Windows, ya que shlex está diseñado para shells Unix. –

Cuestiones relacionadas