zoukankan      html  css  js  c++  java
  • python sys.stdin,sys.stdout,sys.stderr

    stdin , stdout ,以及stderr 变量 包含与标准I/O流 对应的流对象.
    如果需要更好地控制输出,而print 不能满足我们的要求, 它们就是我们所需要的. 
    也可以替换它们, 这时候我们可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们

    测试一下标准输出:

    [python] view plain copy
    1. #testing stdout  
    2. >>> print 'Hello World!' #该语句会在标准输出的屏幕上打印 Hello World!  
    3. Hello World!  
    4. #等价于:  
    5. >>> import sys  
    6. >>> sys.stdout.write('Hello World! ')  
    7. Hello World!  


    我们再测试一下标准输入:

    [python] view plain copy
    1. #testing stdin  
    2. >>> print 'Hi,%s!' % raw_input('Please enter your name:')  
    3. Please enter your name:python  
    4. Hi,python!  
    5. >>>   

    这就是从 标准输入:键盘  获取信息,再输出到 标准输出:屏幕   
    那么上面的例子中print 和 raw_input是如何与标准输入/输出流 建立关系的呢?
    其实Python程序的标准输入/输出/出错流 定义在sys模块中,分别为: sys.stdin, sys.stdout, sys.stderr
    上面的测试标准输入程序与下列的程序是一样的:

    stdin.py文件:

    [python] view plain copy
    1. #!usr/bin/env python  
    2. #coding:utf-8  
    3. import sys  
    4. print 'Please enter your name:',  
    5. name=sys.stdin.readline()[:-1]  
    6. print 'Hi,%s!' % name  

    运行结果:

    [python] view plain copy
    1. song@ubuntu:~$ python stdin.py  
    2. Please enter your name:song  
    3.  Hi,song!  

    那么sys.stdin, sys.stdout, stderr到底是什么呢?我们在Python运行环境中输入以下代码:

    [python] view plain copy
    1. >>> import sys  
    2. >>> sys.stdin  
    3. <open file '<stdin>', mode 'r' at 0x7f63dd3cf0c0>  
    4. >>> sys.stdout  
    5. <open file '<stdout>', mode 'w' at 0x7f63dd3cf150>  
    6. >>> sys.stderr  
    7. <open file '<stderr>', mode 'w' at 0x7f63dd3cf1e0>  

    由此可以看出stdin, stdout, stderr在Python中都是文件属性的对象,
    他们在Python启动时自动与Shell环境中的标准输入,输出,出错 关联。
    而Python程序的在Shell中的I/O重定向与DOS命令的重定向完全相同,
    其实这种重定向是由Shell来提供的,与Python 本身并无关系。
    那么我们是否可以在Python程序内部将stdin,stdout,stderr读写操作重定向到一个内部对象呢?答案是肯定的。
    Python提供了一个StringIO模块来完成这个设想,比如:

    [python] view plain copy
    1. >>> from StringIO import StringIO  
    2. >>> import sys  
    3. >>> buf=StringIO()  
    4. >>> temp=sys.stdout #重定向前保存stdout  
    5. >>> sys.stdout=buf  #将stdout重定向到buff对象  
    6. >>> print 825,'python',0,666  # print会在要打印的信息后面加上一个硬回车  
    7. >>> sys.stdout=temp  #恢复stdout  
    8. >>> buf.getvalue() # print会在要打印的信息后面加上一个硬回车,因此最后有一个' '  
    9. '825 python 0 666 '   


  • 相关阅读:
    IP地址
    ACL访问控制列表
    DHCP原理及配置
    VRRP原理及配置
    ASP.NET CORE RAZOR :向 Razor 页面应用添加模型
    HBuilder + PHP开发环境配置
    添加相关功能
    基于stm32的水质监测系统项目基础部分详细记录
    表单数据验证方法(二)——ASP.NET后台验证
    表单数据验证方法(一)—— 使用validate.js实现表单数据验证
  • 原文地址:https://www.cnblogs.com/chedanlangren/p/8358208.html
Copyright © 2011-2022 走看看