Say I write this:
from subprocessing import Popen, STDOUT, PIPE
p = Popen(["myproc"], stderr=STDOUT, stdout=PIPE)
Now if I do
line = p.stdout.readline()
my program waits until the subprocess outputs the next line.
Is there any magic I can do to p.stdout
so that I could read the output if it's there, but just continue otherwise? I'm looking for something like Queue.get_nowait()
I know I can just create a thread for reading p.stdout
, but let's assume I can't create new threads.
Use the
select
module in Python's standard library, see http://docs.python.org/library/select.html .select.select([p.stdout.fileno()], [], [], 0)
immediately returns a tuple whose items are three lists: the first one is going to be non-empty if there's something to read on that file descriptor.Use
p.stdout.read(1)
this will read character by characterAnd here is a full example: