1. os 与 sys 库的差异

os与sys模块的官方解释如下:

  • os
    This module provides a portable way of using operating system dependent functionality.
    这个模块提供了一种方便的使用操作系统函数的方法。
  • sys
    This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter.
    这个模块可供访问由解释器使用或维护的变量和与解释器进行交互的函数。

2. sys 库常用的函数

函数

说明

sys.argv

命令行参数List,第一个元素是程序本身路径

sys.platform

返回操作系统平台名称,在编写跨平台应用时很有用

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.modules.keys()

返回所有已经导入的模块列表

sys.path

返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

标准流

如果需要更好地控制输出, 而print不能满足你的要求, 它们就是你所需要的.你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备(device), 或者以非标准的方式处理它们

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

Python版本信息

sys.displayhook(value)

如果value非空,这个函数会把他输出到sys.stdout,并且将他保存进__builtin__…指在python的交互式解释器里,’‘代表上次你输入得到的结果,hook是钩子的意思,将上次的结果钩过来

sys.getdefaultencoding()

返回当前你所用的默认的字符编码格式,一般默认为ascii

sys.getfilesystemencoding()

返回将Unicode文件名转换成系统文件名的编码的名字

sys.setdefaultencoding(name)

用来设置当前默认的字符编码,如果name和任何一个可用的编码都不匹配,抛出LookupError,这个函数只会被site模块的sitecustomize使用,一旦别site模块使用了,他会从sys模块移除

sys.builtin_module_names

Python解释器导入的模块列表

sys.executable

Python解释程序路径

sys.getwindowsversion()

获取Windows的版本,Windows系统中有效

sys.stdin.readline()

从标准输入读一行,会读取末尾的换行符

sys.stdout.write()

向标准输出写入内容,例如:sys.stdout.write(“hello world”),屏幕输出 hello world

sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sys.path.append(“自定义模块路径”)

sys.modules 是一个全局字典,该字典是 Python 启动后就加载在内存中。每当程序员导入新的模块,sys.modules 将自动记录该模块。
当第二次再导入该模块时,Python 会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法。

In [7]: sys.version
Out[7]: '2.7.12 (default, Dec  4 2017, 14:50:18) \n[GCC 5.4.0 20160609]'

In [8]: sys.maxint
Out[8]: 9223372036854775807

In [9]: sys.maxunicode
Out[9]: 1114111

In [10]: sys.path
Out[10]:
['',
 '/usr/bin',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/home/ubuntu/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/IPython/extensions',
 '/home/ubuntu/.ipython']

In [11]: sys.platform
Out[11]: 'linux2'

In [12]: sys.api_version
Out[12]: 1013

In [13]: sys.version_info
Out[13]: sys.version_info(major=2, minor=7, micro=12, releaselevel='final', serial=0)
def exitfunc(value):
    print (value)
    sys.exit(0)

print "hello"

try:
    sys.exit(90)
except SystemExit as value:
    exitfunc(value)

print "world"
#	打印结果
#	hello
#	90

程序首先打印 hello,在执行 exit(90),抛异常把 90 传给 value,value 在传进函数中执行,打印 90程序退出。后面的 ”world” 因为已经退出所以不会被打印,而此时如果把 exitfunc 函数里面的sys.exit(0) 去掉,那么程序会继续执行到输出 ”world”。