想象运行一个Python程序,就像在和一个“机器人”对话。那么python的三个标准“流”对象(标准输入 / 输出 / 错误流(stdin / stdout / stderr))可以做以下类比:

名称 作用 类比
sys.stdin 你对机器人说话的“麦克风” 输入
sys.stdout 机器人正常说话的“扬声器” 输出
sys.stderr 机器人“报警”的扩音器

错误信息或警告输出

 1. sys.stdin(标准输入流)- 是程序从外部接收数据的通道

  • 默认:来自键盘。

  • 典型场景:使用 input() 时。输入的内容就是从 sys.stdin 流入程序的

name = input("请输入你的名字:")  # 实际上就是从 sys.stdin 读取内容
print(f"你好,{name}!")

2. sys.stdout(标准输出流)- 是程序输出普通信息的通道

  • 默认:输出到控制台(终端);

  • 常见:print() 使用的就是 sys.stdoutprint() = 调用 sys.stdout.write()。输出内容会显示在控制台。

3. sys.stderr(标准错误流)- 是程序输出错误或警告信息的通道

  • 默认:输出到控制台;

  • 与 sys.stdout 不同的是,它专门负责输出错误或状态信息;常常被用来区分“正常输出”和“错误输出”。这样的话可以区分开错误信息,保证可以显示在终端。

python my_script.py > output.txt
#重定向的时候,普通信息输入到了txt文件中,错误输出(stderr)仍然显示在终端

tqdm 默认把进度条信息输出到 sys.stderr(标准错误流):

from tqdm import tqdm
import time

for i in tqdm(range(5)):  #默认是stderr,如果需要和普通输出在同一个流,可以用file参数改为sys.stdout
    time.sleep(0.5)

如果把程序输出重定向到文件(> output.txt),进度条依然会在屏幕上显示(不会被写入文件)。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐