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 p.stdout.read(1)
this will read character by character
And here is a full example:
import subprocess
import sys
process = subprocess.Popen(
cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
while True:
out = process.stdout.read(1)
if out == '' and process.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With