我正在尝试重新定义 Python3 中的内置打印函数,以默认将 flush 关键字参数设置为 True。类似于以下内容(这实际上不起作用):
def print(message):
print(message, flush=True)
或者,是否有另一种方法可以将 flush 关键字默认设置为 True?任何帮助将不胜感激。
背景信息:
我想这样做的原因是因为它解决了我遇到的另一个问题。 我在Jupyther Notebook中使用Python3时遇到了打印功能问题。 当我同时使用 print() 和 input() 时,执行顺序会任意更改:有时打印输出出现在输入提示之前,有时顺序相反。以下代码在多次运行时生成两个不同的输出。
print("1")
x = input("2")
print("3")
由于我的声誉分数不允许我在此问题中包含图像,因此以下是指向两个结果的链接: 输出版本 1, 输出版本 2。 这似乎是与打印函数的标准输出缓冲相关的已知问题,解决方案是使用 print() 并将 flush 关键字参数设置为 True:print("somestring",flush=True)
。这将立即运行打印输出而不缓冲,从而保留输出的预期顺序。
另一种可能有效的解决方案是在启动脚本之前在环境中使用python -u
或设置PYTHONUNBUFFERED
。
python -u <script name>
。或。。。
PYTHONUNBUFFERED=1 python <script name>
参考: https://docs.python.org/3/using/cmdline.html#cmdoption-u