- 1 1. Introduction
- 2 2. What is Output Buffering in Python?
- 3 3. Using the flush Argument of the print Function
- 4 4. Manual Flushing with sys.stdout.flush()
- 5 5. Specific Scenarios Where flush is Necessary
- 6 6. Differences in flush by Python Version
- 7 7. Common Errors and Their Solutions
- 7.1 Error 1: TypeError: ‘flush’ is an invalid keyword argument for this function
- 7.2 Error 2: Output Not Displaying Immediately (Not an Error but Unexpected)
- 7.3 Error 3: Forgetting to Call flush() and Logs Not Being Output
- 7.4 Error 4: Output Not Appearing Even After Flushing
- 7.5 Error 5: Flush Not Reflecting in Jupyter Notebook
- 8 8. Summary
1. Introduction
Have you ever felt that the content you expected to output with the print
function doesn’t appear on the screen immediately when creating programs in Python? This is due to the “output buffering” mechanism in Python. In particular, in situations where real-time performance is required, this behavior can sometimes cause unexpected troubles.
One way to solve such problems is to utilize the flush
argument in the print
function. By specifying flush=True
, you can immediately reflect the output to the screen or file. In this article, we will explain, in an easy-to-understand way for beginners, how to use flush
in Python’s print
function, its mechanism, as well as common misconceptions and how to handle errors.
In this section, let’s first look at the basic background, such as why the output doesn’t appear immediately and how flush
solves that problem. This is the first step toward smooth Python programming without worrying about output timing.
2. What is Output Buffering in Python?
In Python, “output buffering” is a mechanism where data output by the print
function and others is not necessarily displayed or written to the screen or file immediately. The background for this buffering is the purpose of optimizing processing efficiency.
What is an Output Buffer?
An output buffer is a memory area that temporarily stores data. The content output by print
is not immediately displayed to standard output (screen), but is first accumulated in this buffer. Then, it is displayed all at once at certain timings (for example, when a newline occurs or the buffer is full).
This mechanism is very effective for reducing the load of I/O processing. For example, in cases with a large amount of output, outputting all at once rather than writing to the output destination each time shortens the processing time.
When Does Buffering Affect Output?
In normal scripts, you don’t often notice it, but in the following situations, there can be issues where output appears “delayed” due to buffering.
- When you want to output progress one line at a time in loop processing
- When you want to check logs in real-time
- When output is delayed in Jupyter Notebook or some IDEs
- When writing to files or external streams
In these cases, due to buffering, the output may not appear on the screen for a while, making it seem like the processing has stopped.
Types of Buffering
Python has several buffering modes:
- Full buffering (fully buffered): Output after a certain amount of data has accumulated (usually for files)
- Line buffering (line buffered): Output per newline (usually for terminals)
- Unbuffered (unbuffered): Immediate output (when settings like flush=True are used)
Depending on the output destination and execution environment, the applied buffering mode changes, so sometimes the intended behavior doesn’t occur.
Why is flush Necessary?
To avoid the effects of such buffering and display output immediately, flush
is useful. By using it explicitly, you can manually clear the buffer and force the output to be reflected. In the next section, we will explain in detail how to actually use print
function with flush
.
3. Using the flush Argument of the print Function
Python’s print
function is a convenient function that allows easy text output to standard output, but by default, the output is buffered, so it may not appear on the screen immediately. To avoid such delays and reflect the output immediately, you can use the flush
argument.
Basic Syntax of the flush Argument
Since Python 3.3, the print
function has been added with a keyword argument called flush
in the following form.
print(content, flush=True)
By specifying flush=True
, the contents of the internal buffer are immediately written to standard output right after the print
outputs.
Actual Code Example
Below is a specific example using the flush
argument.
import time
for i in range(5):
print(f"Progress: {i}", flush=True)
time.sleep(1)
In this code, the string “Progress: i” is output at 1-second intervals for each loop iteration. By specifying flush=True
, it is displayed line by line without delay, allowing real-time progress visibility.
On the other hand, if you omit flush=True
, depending on the environment, the output may be delayed and displayed all at once after the loop ends.
Relationship Between Line Breaks and flush
In environments where standard output is line buffered, if there is a newline (\n) at the end of the output string, the buffer is automatically flushed at that point, so immediate output may occur even without explicitly specifying flush=True
.
Example:
print("This is output with a newline") # Usually output immediately
However, in cases where continuous output is done using end=""
without a newline, the output may not be reflected on the screen. For example, the following code requires caution.
print("Loading...", end="") # May not display without flush
time.sleep(2)
In such cases, by adding flush=True
, you can reliably ensure immediate reflection of the output.
print("Loading...", end="", flush=True)
Is flush=True Always Necessary?
flush=True
is a convenient option, but it is not something that should be used all the time. Performing flush processing every time there is output increases I/O operations accordingly, which may affect processing speed. It is recommended to use it only in necessary situations.
In the next chapter, we will explain in detail sys.stdout.flush()
, which is used when you want more flexible control. Using this allows flush operations for outputs other than print
.
4. Manual Flushing with sys.stdout.flush()
If you want to control the timing of output more precisely in Python, you can also use the sys.stdout.flush()
method in addition to the print
function’s flush=True
. This allows you to manually flush the standard output buffer at any desired timing, so you can flexibly handle output operations other than print
.
What is sys.stdout.flush()?
The sys
module in Python contains stream objects such as stdout
(standard output) and stderr
(standard error output), and these provide a flush()
method. Calling flush()
forces the buffered output at that moment to be written to the output destination.
Usage and Code Example
Below is a basic example using sys.stdout.flush()
.
import sys
import time
print("Loading...", end="") # Do not add a newline
sys.stdout.flush() # Immediately reflect the output
time.sleep(2)
print("Done")
In this code, the initial print
outputs the string without a newline, and calling flush()
immediately afterward causes the “Loading…” string to appear instantly.
Differences from flush=True
Features | flush=True | sys.stdout.flush() |
---|---|---|
Scope of Use | print Limited to the print function | Any timing, any output |
Execution Timing | print() Immediately after | Manually at any timing |
Flexibility | Somewhat low | High |
Coding Simplicity | Simple (1 line) | Slightly verbose |
For example, when you want to gather multiple lines of output and display them at once, or when you need to immediately output content written by something other than print
, sys.stdout.flush()
is more appropriate.
Notes
sys.stdout.flush()
To use it, importing thesys
module is required.flush()
If you use it too frequently, the number of I/O operations increases, which may affect performance.
Applicable to Files and Other Streams
This method can also be applied beyond standard output. For example, when writing to a file, calling the file object’s flush()
will immediately save the written content to disk.
with open("log.txt", "a") as f:
f.write("Logging...")
f.flush()
In the next section, we will look in detail at the “real-world usage scenarios” where this flush
feature is especially useful, providing concrete examples.
5. Specific Scenarios Where flush is Necessary
flush=True
or sys.stdout.flush()
may seem like mere options, but they play a very important role in specific situations. In this section, we will introduce some representative scenarios where flush is actually necessary.
Real-Time Display of Progress
When performing a loop in Python and displaying the progress status in the terminal, using only print
can cause the output to be delayed, resulting in the progress not being shown. In such cases, using flush=True
allows the output to be reflected on the screen in real time.
import time
for i in range(5):
print(f"\nProgress: {i + 1}/5", end="", flush=True)
time.sleep(1)
Using end=""
to overwrite the line, and flush=True
for immediate display, results in a smooth progress display.Countermeasures for Output Delay in Jupyter NotebookJupyter Notebook uses a different output handling than a regular terminal, so the output of print
can be delayed. Especially when you want to emit a message during a long-running process, if you do not specify flush=True
, the output may be buffered and
displayed all at once after the process finishes
.
print("Starting processing...", flush=True)
By flushing explicitly in this way, you can view the logs in real time even on a Notebook.

Integration with External Streams or Pipes
In scripts that pipe the output of print
to another program, the output may remain buffered and be delayed, causing the receiving side to wait. Using flush=True
makes it so that the receiver can obtain the data in real time.
When You Want Immediate Reflection in Log File Output
Flushing is also effective for file output. For example, when recording errors or progress in a log file, it can prevent a situation where the log is missing because it was not flushed when a problem occurs.
6. Differences in flush by Python Version
print
function, the flush
argument is a relatively new feature introduced in Python 3.3 and later. Therefore, depending on the Python version, trying to use flush=True
may result in an error. In particular, developers maintaining old code or environments using the Python 2 series need to be careful.
Support in Python 3.3 and Later
In Python 3.3 and later, the flush
keyword argument was officially added to the print
function. In mainstream versions such as Python 3.6 to 3.11, the following code works without issues.
print("Outputting...", flush=True)
This way, it can be used concisely in situations where you want to immediately reflect output to standard output.
Not Supported in Python 3.2 and Earlier, and Python 2 Series
On the other hand, in Python 3.2 and earlier versions, or in the Python 2 series (such as 2.7), since the flush
argument does not exist in the print
function, executing similar code will cause a TypeError
.
# The following cannot be used in Python 2.x or 3.2 and earlier
print("Outputting...", flush=True) # → Error
Alternative Method: Using sys.stdout.flush()
Even in the environments mentioned above, you can achieve the same effect by using sys.stdout.flush()
. For code that prioritizes compatibility, it’s safer to use this method.
import sys
sys.stdout.write("Outputting...")
sys.stdout.flush()
This method works in both Python 2.7 and Python 3.11, making it effective for projects requiring cross-version compatibility.
How to Check the Version
You can easily check if the Python version you are using is 3.3 or higher with the following command:
python --version
# or
python3 --version
Output example:
Python 3.10.12
After confirming this way, decide whether flush=True
can be used or if an alternative method should be adopted.
7. Common Errors and Their Solutions
flush
usage appears simple at first glance, but when you actually use it, you may encounter issues such as “the output is not as expected” or “errors occur”. In this section, we will explain in detail errors and pitfalls that beginners often stumble on, and their solutions.
Error 1: TypeError: ‘flush’ is an invalid keyword argument for this function
Cause:flush
argument is used in a Python version that does not support it (pre‐3.2 or Python 2 series) when using print(..., flush=True)
.Solution:
- Check the Python version you are using.
- If compatibility is needed, use
sys.stdout.flush()
.
import sys
sys.stdout.write("Outputting...")
sys.stdout.flush()
Error 2: Output Not Displaying Immediately (Not an Error but Unexpected)
Cause:Without a newline, if you specify print(..., end="")
without flush, the output may be delayed as it accumulates in the buffer.Solution:
flush=True
Add it explicitly.
print("Loading...", end="", flush=True)
- Alternatively, call
sys.stdout.flush()
after output.
Error 3: Forgetting to Call flush() and Logs Not Being Output
Cause:If the program crashes or is forcibly terminated while outputting to a file, the buffer may not be written, resulting in lost logs.Solution:
- Call
flush()
every time you write, or when opening the file, setbuffering=1
(line buffering) orbuffering=0
(not recommended but immediate output).
with open("log.txt", "a") as f:
f.write("Error occurred
")
f.flush()
Error 4: Output Not Appearing Even After Flushing
Cause:If the output destination is redirected and the buffering mode has changed, it may not reflect immediately. For example, when standard output is redirected to a file, it becomes fully buffered, so it may not reflect immediately.Solution:
- For files or streams, thoroughly call
flush()
explicitly. - During development, check on the terminal if possible.
Error 5: Flush Not Reflecting in Jupyter Notebook
Cause:Jupyter Notebook uses a special output system, so there are cases where output does not display immediately even after flushing.Solution:
IPython.display.clear_output()
You can combine it to control the display visually.flush=True
Even if you use it and output is still delayed, you should also check the notebook kernel and output settings.
The flush feature is very convenient when used correctly, but on the other hand, if you don’t understand the output mechanism, it may appear to malfunction. By understanding these error patterns and countermeasures, you can achieve more reliable output processing.
8. Summary
In this article, using “python print flush
” as the keyword, we have explained in detail the mechanism of standard output in Python and the importance of flush
. Here, let’s organize the key points once again.
Basic Role of flush
print()
internally buffers output, so it may not be output immediatelyflush=True
can be used to immediately reflect the outputsys.stdout.flush()
allows for more flexible control
Effective Use Cases for flush
- When you want to display processing progress in real time
- When immediate display is needed in Jupyter Notebook or GUI apps
- Preventing time lag in log output or external stream integration
- Avoiding data loss when redirecting standard output to a file
Notes on Versions and Compatibility
flush=True
is supported from Python 3.3 onward- In older environments, using
sys.stdout.flush()
is safer
Errors and Troubleshooting
- If output doesn’t appear even after specifying flush, check the output destination and buffer status
- Similarly, for file writes, explicitly using
flush()
improves safety
Output control in Python is not just about using print()
, but by understanding the buffering and flush mechanisms, it becomes possible to build more robust and visually clear programs. Especially when creating scripts or tools that provide information to users during execution, the appropriate use of flush
can greatly affect the results.
Let’s aim to create more refined Python code for output processing by utilizing the above knowledge.