2011-08-04 8 views
9

Tengo un programa que ejecuta desde la línea de comandos que se parece a esto:¿Usar Python para ejecutar otro programa?

$ program a.txt b.txt

El programa requiere dos archivos de texto como argumentos. Estoy intentando escribir una secuencia de comandos de Python 3.2 para ejecutar el programa anterior. ¿Cómo puedo hacer esto? Actualmente, estoy tratando de utilizar el módulo subprocess así:

import subprocess 

with open("a.txt", mode="r") as file_1: 
    with open("b.txt", mode="r") as file_2: 
     cmd = ['/Users/me/src/program', file_1, file_2] 
     process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
     for line in process.stdout: 
      print(line) 

leí this post y el puesto here, que parecen describir soluciones similares a mi problema. Desafortunadamente, después de leer estas publicaciones, todavía no puedo hacer que mi código Python ejecute mi programa.

¿Alguien puede ayudar? ¡Gracias por adelantado!

Respuesta

14

subprocess.Popen espera una serie de cadenas. Dos de los elementos en ese conjunto son identificadores de archivo. Debe pasar el archivo nombre al programa que está intentando ejecutar.

cmd = ['/Users/me/src/program', 'a.txt', 'b.txt'] 

Usted puede deshacerse de las líneas with open(...) as ... completamente.

+0

Gracias por la ayuda, de alguna manera me perdí ese 'subprocess.Popen()' requiere cadenas que no manejan archivos. ¡Tu solución funcionó como un encanto! – drbunsen

5

Dependiendo de sus requisitos, os.system(cmdline) podría ser la solución más simple.

13

Mira @Chris's answer, y también:

subproceso no espera de comandos a fin, por lo que debe utilizar wait método.

process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
    process.wait() 
    for line in process.stdout: 
     print(line) 
+2

Gracias por señalar el método 'wait' - No estaba al tanto de esto. – drbunsen

+0

Si quiere líneas mientras aún se está ejecutando, vea mi respuesta. – agf

Cuestiones relacionadas