Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Python】重定向 Stream 到

【Python】重定向 Stream 到

作者头像
py3study
发布于 2020-01-17 04:30:48
发布于 2020-01-17 04:30:48
93100
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

Python 系统模块 sys 中有三个变量 stdinstdoutstderr ,分别对应标准输入流、输出流与错误流。stdin 默认指向键盘, stdoutstderr 默认指向控制台。

print 方法与 sys.stdout.write()的作用基本相同,后者不会打印额外的符号,并且会将打印字符数作为返回值返回;intput 方法与 sys.stdin.readline() 也很类似,后者会读入输入的每一个字符,包括换行符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import sys
>>> # 测试输出
... 
>>> word = 'Exciting'
>>> n1 = print(word)
Exciting
>>> n1 # 因为print没有返回值,所以 n1 是空值
>>> type(n1)
<class 'NoneType'>
>>> n2 = sys.stdout.write(word + '\n')
Exciting
>>> n2 # len(word) + len('\n') = 9
9
>>> type(n2)
<class 'int'>
>>> # 测试输入
... 
>>> w1 = input()
hello
>>> w1
'hello'
>>> w2 = sys.stdin.readline()
hello
>>> w2 # w2 包括换行符
'hello\n'

sys.stdinsys.stdoutsys.stderr 是三个变量,这意味着我们可以将它们的值修改成我们需要的对象类型,比如文件对象。

文本作为输入流与错误流

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> out = sys.stdout # 首先要将默认的输出流对象存起来
>>> fout = open('outfile', 'w')
>>> sys.stdout = fout
>>> for i in range(10):
...     print(i)
... 
>>> fout.close()
>>> sys.stdout = out # 回复默认输出流对象

现在在命令行 cat 一下 outfile 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat outfile
0
1
2
3
4
5
6
7
8
9

重定向错误流的方法与之类似

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> err = sys.stderr
>>> ferr = open('errfile', 'w')
>>> sys.stderr = ferr
>>> s # 输入一个没有声明过的变量
>>> ferr.close()
>>> sys.stderr = err

在命令行 cat errfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat errfile
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 's' is not defined

可以看到,之前在 python shell 中没有显示的错误日志,现在被写入到 errfile 里面了

文件作为输入流

先准备好要读入的文本文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ echo -e 'hello\nthis\nexcitng\nworld' > infile
$ cat infile
hello
this
excitng
world

在 python shell 中测试一下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> in_stream = sys.stdin
>>> fin = open('infile', 'r')
>>> sys.stdin = fin
>>> s = input()
>>> while s:
...     print(s)
...     s = input()
... 
hello
this
excitng
world
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
EOFError: EOF when reading a line
>>> fin.close()
>>> sys.stdin = in_stream
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python中os与sys两模块的区别 原
os: This module provides a portable way of using operating system dependent functionality.
晓歌
2018/08/15
5030
python中的sys模块函数
Sys模块函数之多,我只能选取自己认为比较实用的一些函数列在此处。借马云找员工的说法,”找最合适的而不是最天才的”,这句话,我个人觉得在很多方面都能适应,学习也不在话下。Sys模块功能的确很多,但我们应该将重点放在那些功能才是最适合我们的,为此,我列的这些函数,就是我认为比较适合我以后开发的函数。 (1)sys.argv 很多人会想,我如何给我的程序在外部传递参数呢?这个,就可以实现。如: Tesy.py Import sys Print sys.argv[number] 一般情况下,number为0是这个脚本的名字,1,2…则为命令行下传递的参数.如: Test.py脚本内容: import sys
全栈程序员站长
2022/09/09
9740
Python 代码片段总结
生成的pyc可以跨平台使用,但是只能这样用python xxx.pyc,而不能使用./xxx.pyc执行,因为缺少了shebang的支持,不过貌似Binfmt_misc可以解决这个问题,ubuntu下apt-get install binfmt-support可以直接安装。
老高的技术博客
2022/12/28
6230
Python 代码片段总结
python模块—command and
  返回结果是一个tuple元组,第一个值为接收状态码,int类型,0表示正常,非0表示异常;第二个值为字符串,即shell命令执行的结果
py3study
2020/01/08
4980
Python基础教程(四)
上面是sys模块所有语法,我们看看就够了,了解下sys.argv和sys.path就足够了
润森
2020/04/08
7500
Python基础教程(四)
Python中标准输入(stdin)、标准输出(stdout)、标准错误(stdout)的用法
Python 3.x 中 input() 函数可以实现提示输入,python 2.x 中要使用 raw_input(),例如:
Python学习者
2023/08/01
4670
Python重定向标准输入、标准输出和标
UNIX用户已经对标准输入、标准输出和标准错误的概念熟悉了。这一节是为其它不熟悉的人准备的。
py3study
2020/01/09
4.1K0
python 守护进程(daemon)
通常,我们执行服务端程序的时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端盒shell都是进程,shell进程是终端进程的子进程,通过ps命令可以很容易的查看到,在这个shell环境下一开始执行的程序都是shell进程的子进程,自然会受到shell进程的影响,在程序里fork子进程后,父进程退出,对于shell进程来说,这个父进程就算执行完毕,而产生的子进程会被init进程接管,从而也就脱离了终端控制。
py3study
2020/01/10
1.1K0
python sys模块的常见用法汇总
python的内置模块sys,提供了系统相关的一些变量和函数,在实际开发中,常见的有以下几种用法
生信修炼手册
2020/05/25
1.9K0
python标准输出 标准错误 重定向
2、ls > log 2>&1  标准输出和标准错误都输出到log,&> log也可以,但是会有版本限制
py3study
2020/01/08
2.8K0
22. Python 模块2
日志是我们排查问题的关键利器,写好日志记录,当我们发生问题时,可以快速定位代码范围进行修改。
py3study
2020/01/15
5790
Python 学习笔记 (8)—— sy
主要介绍用的比较多的sys的模块命令包括:sys.argv,sys.platform,sys.getdefaultencoding,sys.setdefaultencoding(),sys.getfilesystemencoding(),sys.exit(n),sys.path,sys.modules.keys(),sys.stdin,sys.stdout,sys.stderr 等。
py3study
2020/01/08
8930
Python unittest 测试输入(input)和输出(print)
测试输入输出的解决方法是: 将标准输入输出定向到一个StringIO类(python3是 io.StringIO)。
饶文津
2020/05/31
1.8K0
python3模块: sys
一.简介   sys模块用于提供对python解释器的相关操作。 二.常用函数 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.modules 返回系统导入的模块字段,key是模块名,value是模块 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHO
程序员同行者
2018/06/22
5990
python sys.stdout
下面介绍几个我们经常不经意就会用到的sys包的命令 stdout/stderr/stdin
kirin
2020/10/27
9870
python中的print与sys.stdout
在python中,print语句实现打印,从技术角度来说,这是把一个或多个对象转换为其文本表达式形式,然后发送给标准输出流或者类似的文件流,更详细的说,打印与文件和流的概念紧密相连。
tnt阿信
2020/08/05
2K0
python中的print与sys.stdout
Python守护进程daemon实现
守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。 在这里,我们在Linux2.6内核的centos中,ps -ef |awk '{print $1"\t "$2"\t "$3"\t  "$8}'看到:PPID=0的进程有两个,分别是PID=1的/sbin/init进程和PID=2的[kthreadd]进程。
py3study
2020/01/07
7.8K0
python - sys模块
   sys.argv           命令行参数List,第一个元素是程序本身路径   sys.modules.keys() 返回所有已经导入的模块列表    sys.exc_info()     获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息   sys.exit(n)        退出程序,正常退出时exit(0)   sys.hexversion     获取Python解释程序的版本值,16进制格式如:0x020403F0   sys.version        获取Python解释程序的版本信息   sys.maxint         最大的Int值   sys.maxunicode     最大的Unicode值   sys.modules        返回系统导入的模块字段,key是模块名,value是模块   sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值   sys.platform       返回操作系统平台名称   sys.stdout         标准输出   sys.stdin          标准输入   sys.stderr         错误输出   sys.exc_clear()    用来清除当前线程所出现的当前的或最近的错误信息   sys.exec_prefix    返回平台独立的python文件安装的位置   sys.byteorder      本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little'   sys.copyright      记录python版权相关的东西   sys.api_version    解释器的C的API版本   sys.version_info   >>> sys.version_info   (2, 4, 3, 'final', 0) 'final'表示最终,也有'candidate'表示候选,表示版本级别,是否有后继的发行   sys.displayhook(value)      如果value非空,这个函数会把他输出到sys.stdout,并且将他保存进__builtin__._.指在python的交互式解释器里,'_'代表上次你输入得到的结果,hook是钩子的意思,将上次的结果钩过来   sys.getdefaultencoding()    返回当前你所用的默认的字符编码格式   sys.getfilesystemencoding() 返回将Unicode文件名转换成系统文件名的编码的名字   sys.setdefaultencoding(name)用来设置当前默认的字符编码,如果name和任何一个可用的编码都不匹配,抛出LookupError,这个函数只会被site模块的sitecustomize使用,一旦别site模块使用了,他会从sys模块移除   sys.builtin_module_names    Python解释器导入的模块列表   sys.executable              Python解释程序路径   sys.getwindowsversion()     获取Windows的版本   sys.stdin.readline()        从标准输入读一行,sys.stdout.write("a") 屏幕输出a
py3study
2020/01/14
7660
[Python]基本概念与操作1(针对Python2)
原文链接:http://blog.csdn.net/humanking7/article/details/45276831
祥知道
2020/03/10
3270
C++017-C++文件读写应用
在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/
用户2225445
2023/10/16
5120
C++017-C++文件读写应用
相关推荐
Python中os与sys两模块的区别 原
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验