> Only when the program has executed and the output available, subprocess can
> read through PIPE's stdout it seems ( not at any other time).
> With killing, I loose the output.
This is untrue.
>>> process.stdout.read() # Blocks until end of stream.
>>> process.stdout.read(1) # Reads one character, only blocks if that character
>>> is unavailable.
As such you can read the needed chars from the child's STDOUT one at a
time. For example:
import os
import signal
import subprocess
import threading
import sys
stop = False
ping = subprocess.Popen('ping 127.0.0.1', shell = True, stdout =
subprocess.PIPE)
def kill():
global stop
stop = True
os.kill(ping.pid, signal.SIGTERM)
threading.Timer(5, kill).start()
while not stop:
sys.stdout.write(ping.stdout.read(1))
This solution let's you read from the stdout of a program that may
never terminate and time out after a certain amount of time but it's
not pretty. It's unix specific and introduces threads into a program
that doesn't need them. I'd go with trying to limit the time the
child runs through command line options if at all possible.
Cheers,
Aaron
--
http://mail.python.org/mailman/listinfo/python-list