sys
sys模块主要是针对与Python解释器相关的变量和方法,不是主机操作系统。
导入方式:import sys
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 属性及方法 使用说明 sys.argv 获取命令行参数列表,第一个元素是程序本身 sys.exit(n) 退出Python程序,exit(0)表示正常退出。当参数非0时,会引发一个SystemExit异常,可以在程序中捕获该异常 sys.version 获取Python解释程器的版本信息 sys.maxsize 最大的Int值,64位平台是2**63 - 1 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 sys.stdin 输入相关 sys.stdout 输出相关 sys.stderr 错误相关 sys.exc_info() 返回异常信息三元元组 sys.getdefaultencoding() 获取系统当前编码,默认为utf-8 sys.setdefaultencoding() 设置系统的默认编码 sys.getfilesystemencoding() 获取文件系统使用编码方式,默认是utf-8 sys.modules 以字典的形式返回所有当前Python环境中已经导入的模块 sys.builtin_module_names 返回一个列表,包含所有已经编译到Python解释器里的模块的名字 sys.copyright 当前Python的版权信息 sys.flags 命令行标识状态信息列表。只读。 sys.getrefcount(object) 返回对象的引用数量 sys.getrecursionlimit() 返回Python最大递归深度,默认1000 sys.getsizeof(object[, default]) 返回对象的大小 sys.getswitchinterval() 返回线程切换时间间隔,默认0.005秒 sys.setswitchinterval(interval) 设置线程切换的时间间隔,单位秒 sys.getwindowsversion() 返回当前windwos系统的版本信息 sys.hash_info 返回Python默认的哈希方法的参数 sys.implementation 当前正在运行的Python解释器的具体实现,比如CPython sys.thread_info 当前线程信息 |
sys.argv¶
sys.argv是一个脚本执行参数列表,列表的第一个元素是脚本名称,从第二个元素开始才是真正的参数。
1 2 3 4 5 6 7 8 9 10 11 | # test.py import sys for index, arg in enumerate(sys.argv): print("第%d个参数是: %s" % (index, arg)) #这里是命令行的输入 运行python test.py 1 2 3 4,结果: 第0个参数是: test.py 第1个参数是: 1 第2个参数是: 2 第3个参数是: 3 第4个参数是: 4 |
sys.getrefcount(object)¶
我们都知道Python有自动的垃圾回收机制,让我们不用费力去进行内存管理。
那么Python怎么知道一个对象可以被当做垃圾回收呢?
Python使用‘引用计数’
的方式,追踪每个对象 的引用次数,每对这个对象的一次引用,这个计数就加一,每删除一个该对象的引用,这个计数就减一。当引用为0的时候,就表示没有任何变量指向这个对象,那么就可以回收这个对象,腾出它所占用的内存空间。
sys.getrefcount(object)
这个方法可以返回一个对象被引用的次数。
注意,这个次数默认从1开始,因为你在使用sys.getrefcount(object)方法的时候就已经引用了它一次(该引用是临时性的,调用结束后,自动解除引用。)。
如果不好理解,可以简单地认为它自带被动光环:引用+1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | a = "json-python" sys.getrefcount(a) 2 b = a sys.getrefcount(a) 3 c = a sys.getrefcount(a) 4 del c sys.getrefcount(a) 3 del b sys.getrefcount(a) 2 sys.getrefcount(1) 902 sys.getrefcount("a") 36 sys.getrefcount(True) 581 sys.getrefcount(None) 6918 1、"a"、True、None,Python内部环境运行过程中已经引用了它们很多次,None甚至被使用了6918次 |
sys.modules¶
sys.modules
保存有当前Python环境中已经导入的模块记录,这是一个全局字典,当Python启动后就加载在内存中。每当导入新的模块,sys.modules
将自动记录该模块,当第二次试图再次导入该模块时,Python会先到这个字典中查找是否曾经导入过该模块。
1 2 3 4 5 6 7 8 9 10 11 12 | import sys sys.modules {'builtins': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, '_frozen_importlib': <module 'importlib._bootstrap' (frozen)>, '_imp': <module '_imp' (built-in)>, '_warnings': <module '_warnings' (built-in)>, '_thread': .......截取部分 sys.modules.keys() dict_keys(['builtins', 'sys', '_frozen_importlib', '_imp', '_warnings', '_thread', '_weakref', '_frozen_importlib_external', '_io', 'marshal', 'nt', 'winreg', 'zipimport', 'encodings', 'codecs', '_codecs', 'encodings.aliases', ...截取部分 sys.modules.values() dict_values([<module 'builtins' (built-in)>, <module 'sys' (built-in)>, <module 'importlib._bootstrap' (frozen)>, <module '_imp' (built-in)>, <module '_warnings' (built-in)>, <module '_thread' (built-in)>, <module '_weakref' module 'urllib.parse' from 'C:\\Python36\\lib\\urllib\\parse.py'>]) .......截取部分 sys.modules['sys'] <module 'sys' (built-in)> |
sys.platform¶
获取当前执行环境的平台名称,不同的平台返回值如下表所示:
1 2 3 4 5 | 操作系统 返回值 Linux 'linux' Windows 'win32' Windows/Cygwin 'cygwin' Mac OS X 'darwin' |
带百分比的进度条¶
默认情况下sys.stdout指向控制台
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import sys import time def bar(num, total): rate = num / total rate_num = int(rate * 100) r = '\r[%s%s]%d%%' % ("="*num, " "*(100-num), rate_num, ) sys.stdout.write(r) sys.stdout.flush() if __name__ == '__main__': for i in range(0, 101): time.sleep(0.1) bar(i, 100) |
sys.exit(n)¶
退出程序,正常退出时exit(0)
sys.hexversion¶
获取Python解释程序的版本值,16进制格式如:0x020403F0
sys.version¶
获取Python解释程序的版本信息
sys.maxsize¶
最大的Int值 9223372036854775807
sys.maxunicode¶
最大的Unicode值 1114111
sys.path¶
返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
标准流¶
sys.stdout 标准输出¶
sys.stdout.write(str)
向控制台写只能写字符串
sys.stdin 标准输入¶
sys.stdin.readline().strip()' #获得一行数据
读取第一行的n
n = int(sys.stdin.readline().strip()) `
1 2 3 | line = sys.stdin.readline().strip() # 把每一行的数字分隔后转化成int列表 values = list(map(int, line.split())) |
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版本信息,例如:(2, 7, 6, 'final', 0), 'final'表示最终,也有'candidate'表示候选,表示版本级别,是否有后继的发行
sys.displayhook(value)¶
如果value非空,这个函数会把他输出到sys.stdout,并且将他保存进builtin..指在python的交互式解释器里,''代表上次你输入得到的结果,hook是钩子的意思,将上次的结果钩过来
sys.getdefaultencoding()¶
返回当前你所用的默认的字符编码格式
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()¶
从标准输入读一行,会读取末尾的换行符,因此使用strip()函数去掉
sys.stdout.write()¶
向标准输出写入内容,例如:sys.stdout.write("hello world"),屏幕输出 hello world