En una secuencia de comandos , quiero correr una .exe con algunos parámetros de línea de comandos como “- “y,a continuación,

redirigir la salida estándar del programa a un archivo?

¿Cómo puedo implementar?

OriginalEl autor | 2009-05-19

5 Comentarios

  1. 25

    Usted puede redirigir directamente a un archivo con subprocess.

    import subprocess
    with open('output.txt', 'w') as output_f:
        p = subprocess.Popen('Text/to/execute with-arg',
                             stdout=output_f,
                             stderr=output_f)

    OriginalEl autor monkut

  2. 9

    Más fácil es os.system("the.exe -a >thefile.txt"), pero hay muchas otras maneras, por ejemplo con el subprocess módulo en la biblioteca estándar.

    cómo utilizar que subproceso?
    Consulte docs.python.org/library/subprocess.html#replacing-os-system .
    Vale la pena recordar que el símbolo de canalización diferencia entre los sistemas operativos cuando se intenta utilizar el sistema operativo.sistema para redirigir las cosas…

    OriginalEl autor Alex Martelli

  3. 3

    Puede hacer algo como esto
    por ejemplo, para leer la salida de ls -l (o cualquier otro comando)

    p = subprocess.Popen(["ls","-l"],stdout=subprocess.PIPE)
    print p.stdout.read() # or put it in a file

    puede hacer algo similar para stderr/stdin

    pero como Alex menciona si lo que quieren en un archivo, simplemente redirigir el cmd salida a un archivo

    Si se trata de un largo proceso de ejecución, ser conscientes de que la salida estándar (stdout).leer() es el bloqueo. Usted desea ejecutar el subproceso en un subproceso diferente si el script va a seguir haciendo otra cosa o responder a la salida de ‘vivir’.

    OriginalEl autor Anurag Uniyal

  4. 0

    Si sólo se desea ejecutar el archivo ejecutable y esperar los resultados, Anurag la solución es, probablemente, el mejor. Yo necesarios para responder a cada línea de salida tal y como llegó, y se encontró la siguiente trabajado:

    1) Crear un objeto con una write(texto) método. Redirigir stdout (sys.stdout = obj). En su método de escritura, lidiar con la salida de como llega.

    2) Ejecutar un método en un hilo separado con algo como el siguiente código:

        p = subprocess.Popen('Text/to/execute with-arg', stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE, shell=False)
        while p.poll() is None:
            print p.stdout.readline().strip()

    Porque has redirige stdout, el TUBO de enviar la salida a su método de escritura, línea por línea. Si no estás seguro de lo que vas a obtener los saltos de línea, leer(cantidad) trabaja demasiado, creo.

    3) Recuerde redirigir stdout a la configuración predeterminada: sys.stdout = __sys.stdout__

    OriginalEl autor mavnn

  5. 0

    Aunque el título.exe) parece que se trata de un problema en Windows.
    Tuve que compartir que el aceptado respuesta (subproceso.Popen() con stdout/stderr argumentos) no funciona para mí en Mac OS X (10.8) con python 2.7.

    Tuve que usar subproceso.check_output() (python 2.7 y arriba) para hacer que funcione. Ejemplo:

    import subprocess
    
    cmd = 'ls -l'
    out = subprocess.check_output(cmd, shell=True)
    with open('my.log', 'w') as f:
        f.writelines(out)
        f.close()

    Tenga en cuenta que esta solución se escribe todo el acumulado de salida cuando el programa termina.
    Si desea supervisar el archivo de registro durante la ejecución. Puede que desee intentar algo más.
    En mi caso, sólo me preocupaba el resultado final.

    OriginalEl autor kakyo

Dejar respuesta

Please enter your comment!
Please enter your name here