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”。