[Python] live output from subprocess command

Discussão em 'Python' iniciado por Stack, Junho 2, 2025.

  1. Stack

    Stack Membro Participativo

    I'm using a python script as a driver for a hydrodynamics code. When it comes time to run the simulation, I use subprocess.Popen to run the code, collect the output from stdout and stderr into a subprocess.PIPE --- then I can print (and save to a log-file) the output information, and check for any errors. The problem is, I have no idea how the code is progressing. If I run it directly from the command line, it gives me output about what iteration its at, what time, what the next time-step is, etc.

    Is there a way to both store the output (for logging and error checking), and also produce a live-streaming output?

    The relevant section of my code:

    ret_val = subprocess.Popen( run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )
    output, errors = ret_val.communicate()
    log_file.write(output)
    print output
    if( ret_val.returncode ):
    print "RUN failed\n\n%s\n\n" % (errors)
    success = False

    if( errors ): log_file.write("\n\n%s\n\n" % errors)


    Originally I was piping the run_command through tee so that a copy went directly to the log-file, and the stream still output directly to the terminal -- but that way I can't store any errors (to my knowlege).


    My temporary solution so far:

    ret_val = subprocess.Popen( run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True )
    while not ret_val.poll():
    log_file.flush()


    then, in another terminal, run tail -f log.txt (s.t. log_file = 'log.txt').

    Continue reading...

Compartilhe esta Página