python模块之sys

1. 简介

“sys”即“system”,“系统”之意。该模块提供了一些接口,用于访问 Python 解释器自身使用和维护的变量,同时模块中还提供了一部分函数,可以与解释器进行比较深度的交互。

2. 变量和函数

sys模块常用的变量和函数及其功能见下表:

  1. sys.argv 获取运行Python程序的命令行参数。其中sys.argv[0]通常是指该Python程序,sys.argv[1]代表为Python程序提供的第一个参数,sys.argv[2]代表为Python程序提供的第二个参数······以此类推。
  2. sys.path 是一个字符串列表,其中每个字符串都是一个目录名,在使用import语句导入模块时,解释器就会从这些目录中查找指定的模块。
  3. sys.exit() 通过引发SystemExit异常来退出程序。将其放在try块中不能阻止finally块的执行。你可以提供一个整数作为参数(默认为0,标识成功),用来标识程序是否成功运行,这是UNIX的一个惯例。
  4. sys.modules 返回模块名和载入模块对应关系的字典。
  5. sys.platform 此变量是一个字符串,标识解释器当前正在运行的平台名称,它可能是标识操作系统的名称,也可能是标识其他种类的平台,如果运行Jython的话,就是Java虚拟机。
  6. sys.stdin、sys.stdout、sys.stderr 这三个模块变量是类文件流对象,分别表示标准输入、标准输出、标准错误。简单理解,Python利用sys.stdin获得输入,利用sys.stdout输出。
  7. sys.flags 该只读属性返回运行Python命令时指定的旗标。
  8. sys.getfilesystemencoding() 返回在当前系统中保存文件所用的字符集。
  9. sys.getrefcount(object) 返回指定对象的引用计数。前面介绍过,当object对象的引用计数为0时,系统会回收该对象。
  10. sys.getswitchinterval() 返回在当前Python解释器中线程切换的时间间隔。该属性可通过setswitchinterval()函数改变。
  11. sys.implementation 返回当前Python解释器的实现。
  12. sys.maxsize 返回Python整数支持的最大值。在32位平台上,该属性值为2**32-1;在64位平台上,该属性值为2**63-1。
  13. sys.executable 该属性返回Python解释器在磁盘上的存储路径。
  14. sys.byteorder 显示本地字节序的指示符。如果本地字节序是大端模式,则该属性返回big;否则返回little。
  15. sys.copyright 该属性返回与Python解释器有关的版权信息。
  16. sys.version 返回当前Python解释器的版本信息。
  17. sys.winver 返回当前Python解释器的主版本号。
  18. 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)

 

在命令行运行该脚本:

1
$ 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.modulessys.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获取运行参数:

1
2
3
4
5
6
from sys import argv
#输出argv列表的长度
print(len(argv))
#遍历argv列表的每个元素
for arg in argv:
    print(arg)

动态修改模块加载路径:

1
2
3
4
5
import sys
#动态添加g:\fk_ext路径作为模块加载路径
sys.path.append('g:\\fk_ext')
#加载g:\fk_ext路径下的hello模块
import hello

  

ref:

1

2

posted @   matrixray  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示