1. 简介
“sys”即“system”,“系统”之意。该模块提供了一些接口,用于访问 Python 解释器自身使用和维护的变量,同时模块中还提供了一部分函数,可以与解释器进行比较深度的交互。
2. 变量和函数
sys模块常用的变量和函数及其功能见下表:
- sys.argv 获取运行Python程序的命令行参数。其中sys.argv[0]通常是指该Python程序,sys.argv[1]代表为Python程序提供的第一个参数,sys.argv[2]代表为Python程序提供的第二个参数······以此类推。
- sys.path 是一个字符串列表,其中每个字符串都是一个目录名,在使用import语句导入模块时,解释器就会从这些目录中查找指定的模块。
- sys.exit() 通过引发SystemExit异常来退出程序。将其放在try块中不能阻止finally块的执行。你可以提供一个整数作为参数(默认为0,标识成功),用来标识程序是否成功运行,这是UNIX的一个惯例。
- sys.modules 返回模块名和载入模块对应关系的字典。
- sys.platform 此变量是一个字符串,标识解释器当前正在运行的平台名称,它可能是标识操作系统的名称,也可能是标识其他种类的平台,如果运行Jython的话,就是Java虚拟机。
- sys.stdin、sys.stdout、sys.stderr 这三个模块变量是类文件流对象,分别表示标准输入、标准输出、标准错误。简单理解,Python利用sys.stdin获得输入,利用sys.stdout输出。
- sys.flags 该只读属性返回运行Python命令时指定的旗标。
- sys.getfilesystemencoding() 返回在当前系统中保存文件所用的字符集。
- sys.getrefcount(object) 返回指定对象的引用计数。前面介绍过,当object对象的引用计数为0时,系统会回收该对象。
- sys.getswitchinterval() 返回在当前Python解释器中线程切换的时间间隔。该属性可通过setswitchinterval()函数改变。
- sys.implementation 返回当前Python解释器的实现。
- sys.maxsize 返回Python整数支持的最大值。在32位平台上,该属性值为2**32-1;在64位平台上,该属性值为2**63-1。
- sys.executable 该属性返回Python解释器在磁盘上的存储路径。
- sys.byteorder 显示本地字节序的指示符。如果本地字节序是大端模式,则该属性返回big;否则返回little。
- sys.copyright 该属性返回与Python解释器有关的版权信息。
- sys.version 返回当前Python解释器的版本信息。
- sys.winver 返回当前Python解释器的主版本号。
- sys.getrecursionlimit() 返回Python解释器当前支持的递归深度。该属性可通过setrecursionlimit()方法重新设置。
2.1 sys.argv
“argv”即“argument value”的简写,是一个列表对象,其中存储的是在命令行调用 Python 脚本时提供的“命令行参数”。其中sys.argv[0]通常是指该Python程序,sys.argv[1]代表为Python程序提供的第一个参数,sys.argv[2]代表为Python程序提供的第二个参数······以此类推。这个列表中的第一个参数是被调用的脚本名称,也就是说,调用 Python 解释器的“命令”(python
)本身并没有被加入这个列表当中。
举例来说,在当前目录下新建一个 Python 文件example.py
,其内容为:
import sys print("The list of command line arguments:\n", sys.argv)
在命令行运行该脚本:
$ python sys_argv_example.py
The list of command line arguments:
[
'example.py']
2.2 sys.platform
查看sys
模块中的sys.platform
属性可以得到关于运行平台更详细的信息:
sys.platform
'linux'
2.3 sys.byteorder
“byteorder”即“字节序”,指的是在计算机内部存储数据时,数据的低位字节存储在存储空间中的高位还是低位。
“小端存储”时,数据的低位也存储在存储空间的低位地址中,此时sys.byteorder
的值为“little”
。如果不注意,在按地址顺序打印内容的时候,可能会把小端存储的内容打错。当前大部分机器都是使用的小端存储。
sys.byteorder
'little'
而另外还存在一种存储顺序是“大端存储”,即数据的高位字节存储在存储空间的低位地址上,此时sys.byteorder
的值为“big”
。
这种方式看起来好像很合理也很自然,因为我们一般在书面表示的时候都将低位地址写在左边,高位地址写在右边,大端存储的顺序就很符合人类的阅读习惯。但实际上对机器而言,内存地址并没有左右之分,所谓的“自然”其实并不存在。
2.4 sys.executable
该属性是一个字符串,在正常情况下,其值是当前运行的 Python 解释器对应的可执行程序所在的绝对路径。
比如在 Windows 上使用 Anaconda 安装的 Python,该属性的值就是:
>>> sys.executable
'E:\\Anaconda\\Anaconda\\python.exe'
2.5 sys.modules
该属性是一个字典,包含的是各种已加载的模块的模块名到模块具体位置的映射。
通过手动修改这个字典,可以重新加载某些模块;但要注意,切记不要大意删除了一些基本的项,否则可能会导致 Python 整个儿无法运行。
关于其具体的值,由于内容过多,就不在此给出示例了,读者可以自行查看。
2.6 sys.builtin_module_names
该属性是一个字符串元组,其中的元素均为当前所使用的的 Python 解释器内置的模块名称。
注意区别sys.modules
和sys.builtin_module_names
——前者的关键字(keys)列出的是导入的模块名,而后者则是解释器内置的模块名。
其值示例如下:
>>> sys.builtin_module_names
('_abc', '_ast', '_bisect', '_blake2', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_collections', '_contextvars', '_csv', '_datetime', '_functools', '_heapq', '_imp', '_io', '_json', '_locale', '_lsprof', '_md5', '_multibytecodec', '_opcode', '_operator', '_pickle', '_random', '_sha1', '_sha256', '_sha3', '_sha512', '_signal', '_sre', '_stat', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', '_winapi', 'array', 'atexit', 'audioop', 'binascii', 'builtins', 'cmath', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'parser', 'sys', 'time', 'winreg', 'xxsubtype', 'zipimport', 'zlib')
2.7 sys.path
该属性是一个由字符串组成的列表,其中各个元素表示的是 Python 搜索模块的路径;在程序启动期间被初始化。
其中第一个元素(也就是path[0]
)的值是最初调用 Python 解释器的脚本所在的绝对路径;如果是在交互式环境下查看sys.path
的值,就会得到一个空字符串。
交互式环境查看属性第一个元素:
sys.path[0]
''
3.例
sys获取运行参数:
from sys import argv #输出argv列表的长度 print(len(argv)) #遍历argv列表的每个元素 for arg in argv: print(arg)
动态修改模块加载路径:
import sys #动态添加g:\fk_ext路径作为模块加载路径 sys.path.append('g:\\fk_ext') #加载g:\fk_ext路径下的hello模块 import hello
ref:
标签:解释器,python,argv,sys,Python,模块,属性 From: https://www.cnblogs.com/matrixray/p/16947997.html