I want to read the stream of an external process that I start with Python.
From what I've seen that's not possible with the subprocess module?
I want to read the output of "ip monitor neigh" which will show changes in
the ARP table on my Linux computer. Each change is a new line printed by
"ip" and the process continues to run forever.
You can use subprocess for this. If you don't call wait() or
communicate() on the Popen object, the process will happily continue
running. You can call readline on the stdout pipe, which will block
until the command you are running outputs (and flushes) a line.
Something like this should work:
p = subprocess.Popen(['ip', 'monitor', 'neigh'], stdout=subprocess.PIPE)
first_line = p.stdout.readline()
Buffering done by "ip" can ruin your day. It seems reasonable to
expect, though, that something that is printing state changes on
stdout will be careful to flush its output when appropriate.
thanks,
With your confirmation, I've rechecked again and now I see that the
problem I experienced before was with some strange ssh interaction.
--
http://mail.python.org/mailman/listinfo/python-list