# sys模块 ```python sys.argv #命令行参数列表,第一个参数是程序本身路径 sys.exc_info() #获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息 sys.exit(n) #退出程序,正常退出时exit(0) sys.hexversion #获取Python解释程序的版本值,16进制格式如:0x020403F0 sys.maxsize #最大的Int值 sys.maxunicode #最大的Unicode值 sys.modules #返回系统导入的模块字段,key是模块名,value是模块 sys.modules.keys() #返回所有已经导入的模块列表 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版本 ``` # 标准I/O流 stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们 ``` 我们常用print和raw_input来进行输入和打印,那么`print 和 raw_input是如何与标准输入/输出流建立关系的呢? 其实Python程序的标准输入/输出/出错流定义在sys模块中,分别 为: sys.stdin,sys.stdout, sys.stderr 下列的程序也可以用来输入和输出是一样的: `import sys sys.stdout.write('HelloWorld!') print 'Please enter yourname:',` `name=sys.stdin.readline()[:-1]` `print 'Hi, %s!' % name ``` 那么sys.stdin, sys.stdout, stderr到底是什么呢?我们在Python运行环境中输入以下代码: `import sys` `for f in (sys.stdin,sys.stdout, sys.stderr): print f` `输出为:` `', mode 'r' at 892210>` `', mode 'w' at 892270>` `', mode 'w at 8922d0>` 由此可以看出stdin, stdout, stderr在Python中无非都是文件属性的对象,他们在Python启动时自动与Shell 环境中的标准输入,输出,出错关联。 而Python程序的在Shell中的I/O重定向与本文开始时举的DOS命令的重定向完全相同,其实这种重定向是由Shell来提供的,与Python 本身并无关系。那么我们是否可以在Python程序内部将stdin,stdout,stderr读写操作重定向到一个内部对象呢?答案是肯定的。 Python提供了一个StringIO模块来完成这个设想,比如: from StringIO import StringIO import sys buff =StringIO() temp =sys.stdout #保存标准I/O流 sys.stdout =buff #将标准I/O流重定向到buff对象 print 42, 'hello', 0.001 sys.stdout=temp #恢复标准I/O流 print buff.getvalue()