前言
stdin,stdout ,以及stderr变量,包含与标准I/O流对应的流对象。
sys.stdin ---- 标准输入函数,类似于input()/raw_input()
sys.stdput ----标准输出函数,类似于print()
sys.stderr ----标准错误输出函数
实际上,input()和print()都是通过调用标准流实现,sys.stdin和sys.stdout实质上不过是两个interface接口,用于切换不同i/o。
sys.stdin vs input()/raw_input()【标准输入】
sys.stdin.readline() 用于读取一行文本输入,直到按回车。
【注意】①该方式会将换行符打印出来;②此方式无法在输入时为输入内容定义前缀。
sys.stdin.readlines() 用于读取多行文本输入,按下回车 后,无法退出输入。
【注意】①Pycharm中按CTRL+D退出输入模式;②输入数据类型为列表
input()/raw_input() 用于读取一行文本输入;回车符结束输入,但是回车符不会被包含在输入内。
举例:
# -*- encoding:utf-8 -*-
import sys
from pip._vendor.distlib.compat import raw_input
a = raw_input('raw_input()方式,请输入:')
b = input('input()方式,请输入:')
print('aw_input()方式,输入数据:{},数据类型:{}'.format(a, type(a)), 'input()方式,输入数据:{},数据类型:{}'.format(b, type(b)), sep='\n')
c = sys.stdin.readline() # ①该方式会将换行符打印出来;②此方式无法在输入时为输入内容定义前缀
print('sys.stdin.readline()方式,输入数据:{},数据类型:{}'.format(c, type(c)))
d = sys.stdin.readlines()
print('sys.stdin.readlines()方式,输入数据:{},数据类型:{}'.format(d, type(d)))
运行结果:
sys.stdout vs print()【标准输出】
print:python在调用print的过程中,实际上是引用了 sys.stdout.write(obj+’/n’) ,即 print()结束时默认换行,若想实现不自动换行,可使用 print(param,end=‘’) ;
sys.stdout.write() 方法把字符写入到标准输出中,也就是控制台。该方法默认不换行,若想实现换行,可使用 sys.stdout.write(‘str/n’)
区别: print() 几乎可以打印所有类型的数据,但是 sys.stdout.write() 只接受字符型数据
例如:
import sys
print('Hello World!') # 该语句会在标准输出的屏幕上打印 Hello World!
# 等价于:
sys.stdout.write('Hello World!\n')
sys.stdout和sys.stderr
1、标准输出和标准错误(通常缩写为 stdout 和 stderr)是建立在每个UNIX系统内的管道(pipe)。
当你 print 某东西时,结果输出到 stdout 管道中;当你的程序崩溃并打印出调试信息时(象Python中的错误跟踪),结果输出到 stderr 管道中。
2、通常这两个管道只与你正在工作的终端窗口相联,所以当一个程序打印输出时,你可以看到输出,并且当一个程序崩溃时,你可以看到调试信息。(如果你在一个基于窗口的Python IDE系统上工作,stdout 和 stderr 缺省为“交互窗口”。)
3、stdout 和 stderr 都是类文件对象,就象我们在提取输入源中所讨论的一样,但它们都是只写的。它们没有 read 方法,只有 write。
然而,它们的确是类文件对象,并且你可以将任意文件对象或类文件对象赋给它们来重定向输出。
4、sys.stdout是有缓冲区的,解决缓冲有两种方式:
- print()或者 sys.stdout.write() 后加 sys.stdout.flush()
- 执行python脚本时增加-u参数,即 python -u XXX.py
去期待陌生,去拥抱惊喜。