Python3如何判断print()输出是到终端还是重定向到文件
Python 3 中判断标准输出走向的方法
完全可以实现对输出流向的判断,也支持根据是否重定向打印差异化内容,核心实现依赖Python标准库sys模块提供的终端检测接口。
核心判断逻辑
标准输出流对象sys.stdout自带isatty()方法,该方法返回布尔值:
- 返回
True:当前标准输出直接关联终端设备,对应直接执行python3 example.py、内容直接打印到终端的场景 - 返回
False:当前标准输出未关联终端,对应执行python3 example.py > log.txt重定向到文件、或者通过管道传递给其他命令的场景
可直接运行的示例代码
将以下代码保存为example.py:
import sys if sys.stdout.isatty(): # 输出到终端时的差异化内容,比如可以加ANSI彩色格式、交互提示等 print('Hello,当前内容直接打印在终端') else: # 输出重定向到文件/管道时的差异化内容,比如输出结构化日志、去掉终端专属格式 print('Hello,当前内容被重定向写入文件/传入管道')
效果验证
- 终端直接执行
python3 example.py,会在终端看到输出:Hello,当前内容直接打印在终端 - 执行
python3 example.py > log.txt后查看log.txt文件,文件内存储的内容为:Hello,当前内容被重定向写入文件/传入管道
补充说明
isatty()只能判断输出是否连接终端,如果你需要进一步区分输出是重定向到普通文件、还是管道传给其他进程,需要额外调用对应操作系统的底层接口,绝大多数日常场景下用isatty()已经可以满足需求。
内容的提问来源于stack exchange,提问作者ersbygre1
相关产品推荐
相关产品推荐

