raxacoricofallapatorius raxacoricofallapatorius - 4 months ago 13
Python Question

How do I print from a Python 2.7 script invoked from Bash within PyCharm?

For example if I have a python script

test.py
containing

import time

print 'foo'
time.sleep(5)

print 'bar'
time.sleep(5)


and a shell script
run_test.sh
containing

#!/usr/bin/env bash

python test.py


then running the latter (using the Run menu item for example) from within PyCharm (2016.1) prints no output until the entire script has completed (after about 10 seconds).

Is there a way to print output as my shell script runs?

Answer

Looks like you need to explicitly flush the buffer:

import sys

print 'foo'
sys.stdout.flush()
time.sleep(5)

print 'bar'
sys.stdout.flush()
time.sleep(5)

See Disable output buffering for Python 2 solutions that auto-flush after every print.

In your case, since you control the bash file that runs Python, just add -u or set PYTHONUNBUFFERED=1:

python -u test.py

or

PYTHONUNBUFFERED=1 python test.py
Comments