python之标准输入(stdin)、标准输出(stdout)、标准错误(stdout)

前言

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 
posted @ 2021-10-18 16:50  习久性成  阅读(9843)  评论(0编辑  收藏  举报