简体   繁体   中英

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?

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

Just to add to @MartijnPieters' answer with regard to PyCharm:

In PyCharm, set the run configuration for the shell script under Run -> Edit Configurations , like so:

在此处输入图片说明

Note the PYTHONUNBUFFERED=1 .

You may have to first add a Bash run configuration under the Defaults menu on the left.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM