'Capture standard output of a python program as it happens

I'm trying to write a C# program that captures the standard output in a python program. My problem is that all of the output comes after the program has executed rather than when it actually happens. As an example, for this python program:

print "Hello"
time.sleep(2)
print "Hello"

I would expect to get "Hello", a two second gap, and then another "Hello". The actual result is a two second gap and then "Hello", "Hello".

If I run the above python script from the command line, I get the desired behaviour. If the command prompt can do this, then I should be able to mimic that functionality without having to flush the buffer repeatedly.

I'm using this to run the process from C#:

_proc = new Process
            {
                StartInfo = new ProcessStartInfo
                                {
                                    FileName = "C:\\Python27\\python.exe",
                                    Arguments = pyScript,
                                    RedirectStandardError = true,
                                    UseShellExecute = false,
                                    RedirectStandardOutput = true,
                                    CreateNoWindow = true
                                }
            };
_proc.OutputDataReceived += ProcOnOutputDataReceived;
_proc.Start(); 
_proc.BeginOutputReadLine();

I can run this C# code (and changing the ProcessStartInfo properties above to run C# executable) and it behaves correctly:

Console.WriteLine("Hello");
Thread.Sleep(2000);
Console.WriteLine("Hello");

With this code I get "Hello", a two second gap, and then another "Hello".

Any idea why? How can I get the python interpreter to send the standard output as it happens?



Solution 1:[1]

I know this is old but running python with -u option (unbuffered) seems to be what you were after

Solution 2:[2]

You need to flush the output buffer.

import sys
sys.stdout.flush()

See this question: How to flush output of Python print?

Solution 3:[3]

Good (Capture standard output of a python program as it happens) Em console is NEED: import sys sys.stdout.flush()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Community
Solution 3 GTIcontrol