python重定向sys.stdin、sys.stdout和sys.stderr
标准输入、标准输出和错误输出。
标准输入:一般是键盘。stdin对象为解释器提供输入字符流,一般使用raw_input()和input()函数。
例如:让用户输入信息(Python环境为2.x):
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 import sys 4 name = raw_input("Please input your name: ") 5 print name 6 7 # python test.py 8 Please input your name: xiaoming 9 xiaoming
1 import sys 2 print "Please enter your name: " 3 name = sys.stdin.readline() 4 print name 5 6 # python b.py 7 Please enter your name: 8 xiaoming 9 xiaoming
再例如,a.py文件标准输出作为b.py文件标准输入:
1 # cat a.py 2 import sys 3 sys.stdout.write("123456\n") 4 sys.stdout.flush() 5 # cat b.py 6 import sys 7 print sys.stdin.readlines() 8 9 # python a.py | python b.py 10 ['123456\n']
sys.stdout.write()方法其实就是下面所讲的标准输出,print语句就是调用了这个方法。
标准输出:一般是屏幕。stdout对象接收到print语句产生的输出。
例如:打印一个字符串:
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 import sys 4 print "Hello world!" 5 6 # python test.py 7 Hello world!
sys.stdout是有缓冲区的,比如:
1 import sys 2 import time 3 for i in range(5): 4 print i, 5 # sys.stdout.flush() 6 time.sleep(1) 7 # python test.py 8 0 1 2 3 4
本是每隔一秒输出一个数字,但现在是循环完才会打印所有结果。如果把sys.stdout.flush()去掉,就会没执行到print就会刷新stdout输出,这对实时输出信息的程序有帮助。
错误输出:一般是错误信息。stderr对象接收出错的信息。
例如:引发一个异常
1 >>> raise Exception, "raise..." 2 Traceback (most recent call last):File "<stdin>", line 1, in <module> 3 Exception: raise...
总结:
sys.stdout与print
当我们在 Python 中打印对象调用 print obj 时候,事实上是调用了 sys.stdout.write(obj+'\n') ;print 将你需要的内容打印到了控制台,然后追加了一个换行符;print 会调用 sys.stdout 的 write 方法
以下两行在事实上等价:
1 sys.stdout.write('hello'+'\n') 2 3 print 'hello'
sys.stdin与raw_input:
当我们用 raw_input('Input promption: ') 时,事实上是先把提示信息输出,然后捕获输入
以下两组在事实上等价:
1 hi=raw_input('hello? ') 2 3 print 'hello? ', #comma to stay in the same line 4 5 hi=sys.stdin.readline()[:-1] # -1 to discard the '\n' in input stream
从控制台重定向到文件
原始的 sys.stdout 指向控制台
如果把文件的对象的引用赋给 sys.stdout,那么 print 调用的就是文件对象的 write 方法
1 f_handler=open('out.log', 'w') 2 3 sys.stdout=f_handler 4 5 print 'hello' 6 7 # this hello can't be viewed on concole 8 9 # this hello is in file out.log
记住,如果你还想在控制台打印一些东西的话,最好先将原始的控制台对象引用保存下来,向文件中打印之后再恢复 sys.stdout:
1 __console__=sys.stdout 2 3 # redirection start # 4 5 ... 6 7 # redirection end 8 9 sys.stdout=__console__
- python重定向sys.stdin、sys.stdout和sys.stderr
- Python的sys.stdout、sys.stdin重定向
- Python的sys.stdout、sys.stdin重定向
- Python的sys.stdout、sys.stdin重定向
- Python的sys.stdout、sys.stdin重定向
- python 打印重定向:stdin,stdout,stderr
- linux 输入--输出--重定向 stdin/stdout/stderr
- python的sys.stdout重定向
- sys.stdout的应用,Python标准输出sys.stdout的重定向
- #小练习 重定向与sys.stdout对象 分类: python 小练习 2013-11-05 16:10 437人阅读 评论(0) 收藏
- Windows管道(Pipe)重定向stdout,stderr,stdin
- 如何将stdin、stdout、stderr重定向到/dev/null
- 如何将stdin、stdout、stderr重定向到/dev/null
- stdin, stdout, stderr以及重定向
- 数据重定向(stdin,stdout,stderr)
- 第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)
- daemon守护进程中将stdin,stdout,stderr重定向到/dev/null的问题
- 04 Linux Shell 文件描述符 及 stdin stdout stderr 重定向
- 利用stdin stdout stderr及POSIX-linux机制重定向写日志
- Windows管道(Pipe)重定向stdout,stderr,stdin