2011-01-29 8 views
5
subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"]) 

Hago esto. Sin embargo, dentro de mi run.sh, tengo caminos "relativos". Entonces, tengo que "cd" en ese directorio, y luego ejecutar el script de shell. ¿Cómo puedo hacer eso?¿Cómo ejecuto un script bash dentro de Python, pero actúo como si estuviera ejecutándose desde otro directorio?

+0

no soy un experto subproceso, pero ¿podría hacer: subprocess.call ([ "" cd/run/ruta; /home/blah/trunk/blah/run.sh ","/tmp/ad_xml ","/tmp/video_xml "]) ?? – inspectorG4dget

Respuesta

12

utilizar el argumento cwd a subprocess.call()

A partir de los documentos aquí: http://docs.python.org/library/subprocess.html

If cwd is not None, the child’s current directory will be changed to cwd before it is executed. Note that this directory is not considered when searching the executable, so you can’t specify the program’s path relative to cwd .

Ejemplo:

subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], cwd='/tmp') 
+0

Así que debería tener un subprocess.call sobre esa línea? – TIMEX

+0

Esto no funciona subprocess.call (["cwd/home/blah/trunk/blah /"]) Dice OSError: [Errno 2] No existe tal archivo o directorio – TIMEX

+0

Usted pone cwd como un argumento de Python con nombre. Agregué un ejemplo a la respuesta . – payne

1

Bueno, se podría utilizar subprocess.Popen con Shell = Verdadero y cwd = "Su deseada directorio de trabajo"

EDIT: Parece que la llamada tiene los mismos argumentos tan sólo la creación de un argumento cwd trabajarían:

subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], cwd="PATH") 
1

usted puede suministrar su directorio de trabajo así:

subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], cwd="/home/blah/trunk/blah")

Cuestiones relacionadas