Python3.x环境下tf.print在IDLE中无输出但终端运行正常问题问询
tf.print在IDLE无输出、终端正常的原因分析
运行环境
- 操作系统:MacOS Big Sur(11.4)
- 测试Python版本:3.7.2、3.9.5
- TensorFlow版本:2.5.0
核心原因
这个差异是IDLE和原生终端的标准输出流捕获逻辑不同导致的:
tf.print底层是TensorFlow的C++内核直接向系统标准输出流(stdout)打印内容,不会走Python层面封装的sys.stdout接口- IDLE为了把输出展示在图形化交互窗口中,重写了Python的
sys.stdout对象,只会捕获Python层面调用sys.stdout输出的内容,C++直接输出到系统stdout的内容会被IDLE忽略,因此无法显示 - 终端直接启动的Python解释器没有重写
sys.stdout,C++层面的输出可以直接打印到终端界面,因此tf.print运行正常
验证&解决方法
你可以在IDLE中运行以下代码验证该问题,手动指定tf.print的输出流为Python层面的sys.stdout即可正常显示:
import tensorflow as tf import sys # 原生Python print可正常显示 print("Python原生print测试") # 无输出 tf.print("默认tf.print测试") # 手动指定输出流后可正常显示 tf.print("重定向后tf.print测试", output_stream=sys.stdout)
内容的提问来源于stack exchange,提问作者futurebaby
相关产品推荐
相关产品推荐

