【问题标题】:How do I print from a Python 2.7 script invoked from Bash within PyCharm?如何从 PyCharm 中的 Bash 调用的 Python 2.7 脚本进行打印?
【发布时间】:2016-07-16 13:07:34
【问题描述】:

例如,如果我有一个 python 脚本 test.py 包含

import time

print 'foo'
time.sleep(5)

print 'bar'
time.sleep(5)

和一个shell脚本run_test.sh包含

#!/usr/bin/env bash

python test.py

然后从 PyCharm (2016.1) 中运行后者(例如使用“运行”菜单项)不会打印任何输出,直到整个脚本完成(大约 10 秒后)。

有没有办法在我的 shell 脚本运行时打印输出?

【问题讨论】:

  • print('foo', flush=True) 有帮助吗?
  • 什么 PyCharm 版本?我根本无法重现。
  • @raxacoricofallapatorius:啊,Python 2,错过了,抱歉。 import sys 在顶部,然后是 sys.stdout.flush() 在每个打印语句之后。
  • export PYTHONUNBUFFERED=1添加到shell脚本?
  • @Will:是的,这也有效。无论是那个还是 -u 都可以解决问题。

标签: python bash python-2.7 output pycharm


【解决方案1】:

看起来您需要显式刷新缓冲区:

import sys

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

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

请参阅Disable output buffering,了解每次打印后自动刷新的 Python 2 解决方案。

在您的情况下,由于您控制运行 Python 的 bash 文件,因此只需添加 -u 或设置 PYTHONUNBUFFERED=1

python -u test.py

PYTHONUNBUFFERED=1 python test.py

【讨论】:

    【解决方案2】:

    就 PyCharm 而言,只需添加到 @MartijnPieters' answer

    在 PyCharm 中,在 Run->Edit Configurations 下设置 shell 脚本的运行配置,如下所示:

    注意PYTHONUNBUFFERED=1

    您可能必须先在左侧的 Defaults 菜单下添加 Bash 运行配置。

    【讨论】:

      猜你喜欢
      • 2015-06-29
      • 2011-06-15
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2021-04-09
      • 2017-09-21
      相关资源
      最近更新 更多