Catching subprocess stdout stream
Thomas Jansson
tjansson60 at gmail.com
Mon Sep 8 11:37:28 EDT 2008
Dear all
I have tkinkter based frontend to a Fortran based program. I use
subprocess to launch the fortran program as a child process and I wish
to see the output of the fortran program as it is created in the
console.
The fortran program can take up to 20 minuttes to finish and at the
moment the I will first see any output after the fortran program is
done. How make my function write the output of the process as it
comes?
def runprogram(Icommand, Ijobfile, Ioutput):
if os.name == "posix":
os.system(pythonpath+"/bin/"+Icommand+"< "+Ijobfile+" | tee
"+Ioutput)
elif os.name == "nt":
import subprocess
ofile = open(Ioutput, 'w')
p = subprocess.Popen([os.path.join(pythonpath, "bin", Icommand
+ '.exe')],
stdin=open(Ijobfile,
"rb"),bufsize=1024,shell=False,
stdout=subprocess.PIPE)
while p.poll() is None: #Check if child process has terminated.
o = p.stdout.readline()
ofile.writelines(o)
print o,
ofile.close
Kind regards
Thomas Jansson
More information about the Python-list
mailing list