python之sys模块

sys 是一个和 Python 解释器关系密切的标准库,它和帮助我们访问和 Python 解释器联系紧密的变量和函数。

在 Python 的交互式解释器中,先导入 sys 模块,然后输入 [e for e in dir(sys) if not e.startswith(’_’)] 命令(sys 模块没有 all 变量),可以看到如下输出结果:

>>> [e for e in dir(sys) if not e.startswith('_')]
['api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions', 'winver']

上面列出的就是 sys 模块所包含的全部成员(包括变量、函数等),读者不要被它们吓着了,以为这些全都需要记下来。实际上完全没有必要,通常都是用到哪些模块就去查阅其对应的说明文档和参考手册。

sys 模块的参考页面为 https://docs.python.org/3/library/sys.html

需要说明的是,大部分时候用不到 sys 模块里很冷僻的功能,因此本节只介绍 sys 模块中常用的属性和函数(如表 1 所示)。

表 1 sys模块常用成员及功能:

sys成员(变量和函数)功能描述
sys.argvleft-aligned 获取运行 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.getrecursionlimit()返回 Python 解释器当前支持的递归深度。该属性可通过 setrecursionlimit() 方法重新设置。
sys.getswitchinterval()返回在当前 Python 解释器中线程切换的时间间隔。该属性可通过 setswitchinterval() 函数改变。
sys.implementation返回当前 Python 解释器的实现。
sys.maxsize返回 Python 整数支持的最大值。在 32 位平台上,该属性值为 231-1;在 64 位平台上,该属性值为 263-1。
sys.executable该属性返回 Python 解释器在磁盘上的存储路径。
sys.byteorder显示本地字节序的指示符。如果本地字节序是大端模式,则该属性返回 big;否则返回 little。
sys.copyright该属性返回与 Python 解释器有关的版权信息。
sys.version返回当前 Python 解释器的版本信息。
sys.winver返回当前 Python 解释器的主版本号。

下面程序示范了使用 sys 模块的部分功能:

import sys

print(sys.byteorder)  # 显示本地字节序的指示符。
# little

print(sys.copyright)   # 显示Python解释器有关的版权信息
# Copyright (c) 2001-2017 Python Software Foundation.
# All Rights Reserved.
# Copyright (c) 2000 BeOpen.com.
# All Rights Reserved.

# Copyright (c) 1995-2001 Corporation for National Research Initiatives.
# All Rights Reserved.

# Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
# All Rights Reserved.

print(sys.executable)   # 显示Python解释器在磁盘上的存储路径。
# D:\python3.6\pythonw.exe

print(sys.getfilesystemencoding())   # 显示当前系统上保存文件所用的字符集。
# utf-8

print(sys.maxsize)   # 显示Python整数支持的最大值
# 9223372036854775807

print(sys.platform)   # 显示Python解释器所在平台
# win32

print(sys.version)   # 显示当前Python解释器的版本信息。
# 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)]

print(sys.winver)   # 返回当前Python解释器的主版本号。
# 3.6

上面程序分别调用了 sys 模块的部分属性和函数。运行该程序,可以看到如下输出结果:

little
Copyright (c) 2001-2017 Python Software Foundation.
All Rights Reserved.
Copyright (c) 2000 BeOpen.com.
All Rights Reserved.

Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All Rights Reserved.

Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.
D:\python3.6\pythonw.exe
utf-8
9223372036854775807
win32
3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)]
3.6

从上面的输出结果可以看出,Windows 7 系统的字节序是小端模式,将 Python 解释器保存在 D:\python3.6\pythonw.exe 处,当前 Python 版本是 3.6.2。

sys获取运行参数

通过 sys 模块的 argv 属性可获取运行 Python 程序的命令行参数。argv 属性值是一个列表,其列表元素和运行参数的关系如图所示。
图 1 运行 Python 程序时命令行参数与 argv 列表的关系
因此,如果需要获取运行 Python 程序时传入的参数,可以通过 argv[1]、argv[2]……来获取。例如下面程序(编写在 argv_test.py 文件中):

from sys import argv

print(len(argv))  # 输出argv列表的长度

for arg in argv:   # 遍历argv列表的每个元素
   print(arg)

上面程序是最简单的“Hello World”级的程序,只是这个程序增加了输出 argv 列表的长度、遍历 argv 列表元素的代码。使用“python argv_test.py” 命令运行上面程序,可以看到如下输出结果:

1
argv_test.py

此时看到 argv 列表的长度为 1,argv 的第一个元素就是被运行的 Python 程序。

如果改为使用如下命令来运行该程序:

python argv_test.py Python Swift

可以看到如下输出结果:

3
argv_test.py
Python
Swift

上面两次运行的结果和前面介绍的内容完全一致。

如果某个参数本身包含了空格,则应该将该参数用双引号("")括起来;否则,Python 会把这个空格当成参数分隔符,而不是参数本身。例如,采用如下命令来运行上面程序:

python argv test.py "Python Swift"

可以看到 argv 列表的长度是 2,第一个列表元素是被运行的 Python 程序,第二个列表元素的值是“Python Swift”。

动态修改模块加载路径

前面介绍了使用 PYTHONPATH 环境变量来添加 Python 模块的加载路径,但这种方式必须预先设置好。
如果需要在程序运行时动态改变 Python 模块的加载路径,则可通过 sys.path 属性来实现

sys.path 也是很有用的一个属性,它可用于在程序运行时为 Python 动态修改模块加载路径。例如,如下程序在运行时动态指定加载 g:\fk_ext 目录下的模块:

import sys

sys.path.append('g:\\fk_ext')  # 动态添加g:\fk_ext路径作为模块加载路径

import hello  # 加载g:\fk_ext路径下的hello模块

为了成功运行该程序,需要在 G:\ 盘中创建 fk_ext 目录,并在该目录下添加 hello.py 模块文件。

# 针对不同目录下文件里面方法的调用

import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# print(os.path.dirname(os.path.dirname(__file__)))  
sys.path.append(BASE_DIR)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值