Python sys模块的使用

Posted 小斌哥ge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python sys模块的使用相关的知识,希望对你有一定的参考价值。


Python sys模块的使用

sys模块是Python中的标准库,是与Python的解释器交互的库,可以通过sys来获取Python解释器的信息。

os模块是与操作系统交互的,对应的是操作系统,sys是与Python解释器交互的,对应的是Python的运行环境。

一、sys模块返回当前解释器版本

# coding=utf-8
import sys


print(sys.version)
print(sys.version_info)

Python3:

3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) 
[MSC v.1916 64 bit (AMD64)]
sys.version_info(major=3, minor=7, micro=3, releaselevel=final, serial=0)

Python2:

2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
sys.version_info(major=2, minor=7, micro=5, releaselevel=final, serial=0)

sys.version 和 sys.version_info 都可以返回当前的Python解释器的版本信息。如果,同一个脚本要在 Python2 和 Python3 中都能运行,但是 Python2 和 Python3 实现的代码不同,可以获取解释器版本,通过判断解释器版本来执行不同代码。

sys.version 返回的是一个三段式的版本号(主版本号.子版本号.阶段版本号),这个版本号可以与数字比较大小(判断时使用)。

sys.version_info 返回的是一个版本信息的元组,可以使用其中的 major 值来判断解释器版本。

在 windows 中还可以使用 sys.winver 来获取Python解释器的主版本和子版本。

二、sys模块获取当前解释器的编码方式

print(sys.getdefaultencoding())
print(sys.getfilesystemencoding())
print(sys.platform)

Python3:

utf-8
utf-8
win32

Python2:

ascii
mbcs
win32

sys.getdefaultencoding() 返回当前解释器的编码方式,在 Python3 中,默认的编码方式是 utf-8 。在 Python2 中,默认的编码方式是 ascii ,可以使用如下代码将编码方式设置为 utf-8 。

reload(sys)
sys.setdefaultencoding(utf-8)

sys.getfilesystemencoding() 返回当前解释器中写文件使用的编码方式。在 Python3 中默认的是 utf-8。在 Python2 中,默认的编码方式是 mbcs 。MBCS(Multi-Byte Chactacter System,即多字节字符系统)是一种编码类型。

sys.platform 返回当前操作系统的名称。

三、sys.path返回导包的顺序

print(sys.path)

windows:

[C:\\\\Users\\\\python\\\\Desktop\\\\python_demo\\\\os_test, 
C:\\\\Users\\\\python\\\\Desktop\\\\python_demo,
C:\\\\Users\\\\python\\\\Desktop\\\\python_demo\\\\call_back,
C:\\\\Program Files\\\\JetBrains\\\\PyCharm 2019.1.1\\\\helpers\\\\pycharm_display,
C:\\\\Program Files\\\\Python37\\\\python37.zip,
C:\\\\Program Files\\\\Python37\\\\DLLs,
C:\\\\Program Files\\\\Python37\\\\lib,
C:\\\\Program Files\\\\Python37,
C:\\\\Users\\\\python\\\\AppData\\\\Roaming\\\\Python\\\\Python37\\\\site-packages,
C:\\\\Program Files\\\\Python37\\\\lib\\\\site-packages,
C:\\\\Program Files\\\\JetBrains\\\\PyCharm 2019.1.1\\\\helpers\\\\pycharm_matplotlib_backend]

Redhat:

[/root/python_demo/os_test, 
/usr/lib64/python27.zip,
/usr/lib64/python2.7,
/usr/lib64/python2.7/plat-linux2,
/usr/lib64/python2.7/lib-tk,
/usr/lib64/python2.7/lib-old,
/usr/lib64/python2.7/lib-dynload,
/usr/lib64/python2.7/site-packages,
/usr/lib/python2.7/site-packages,
/usr/lib/python2.7/site-packages/cloud_init-0.7.6-py2.7.egg]

sys.path 返回的是Python导包顺序的列表,使用 import ... , from ... import ... 等方式导包时,会按此顺序到这些目录下寻找要导入的模块,如果找到了就不会继续往下。

导包的顺序是由近及远的,会优先在当前目录下导。

很多人会犯一个错,自己代码的文件名与模块的名字一样,导致导包出错,因为导包时,按照 sys.path 的顺序,导入的其实是本地自己创建的文件,而不是需要导入的模块,所以代码运行时报错。

四、sys返回当前环境中导入的包

print(sys.modules.keys())

运行结果:

[copy_reg, sre_compile, locale, _sre, functools,
encodings, site, __builtin__, sysconfig, operator,
__main__, types, encodings.encodings, encodings.gbk,
abc, _weakrefset, encodings._codecs_cn, errno,
encodings.codecs, sre_constants, re, _abcoll, ntpath,
_codecs, encodings._multibytecodec, nt, _warnings,
genericpath, stat, zipimport, encodings.__builtin__,
warnings, UserDict, _multibytecodec, sys, codecs,
os.path, _functools, _codecs_cn, _locale,
sitecustomize, signal, traceback, linecache,
encodings.aliases, exceptions, sre_parse, os, _weakref]

sys.modules 返回当前解释器中,模块名和导入的模块对应关系的字典,使用 modules.keys() 方法获取到导入的所有模块名列表。

启动 Python 时,这些模块就被加载到了内存中,如果代码中第一次导入一个模块,解释器会将此模块加入到 modules 中。当第二次导入模块时,Python 解释器会直接到 modules 字典中查找。

五、sys.argv获取命令行的参数

print(sys.argv[0])
print(sys.argv)

(PyCharm)直接运行:

C:/Users/python/Desktop/python_demo/os_test/sys_demo.py
[C:/Users/python/Desktop/python_demo/os_test/sys_demo.py]

直接运行后,sys.argv 会返回当前文件的绝对路径,返回结果是一个列表。

传入参数运行:

$ python sys_demo.py one tow three hello python
sys_demo.py
[sys_demo.py, one, tow, three, hello, python]

在命令行运行,后面依次跟传入 Python 脚本的参数,用空格隔开。 sys.agrv 会获取脚本的文件名和后面传入的所有参数,返回结果是一个列表,列表中的参数顺序与传入的顺序一致。所以,列表的第一个元素一定是文件名。

利用 sys.argv ,可以实现类似 Linux 命令使用方式的脚本,把复杂的功能封装到脚本中,使用时在脚本名后面跟选项和参数,将参数传入脚本中,使用起来非常方便。在工作中,这种应用场景非常多,类似于 Shell 脚本。

六、sys自定义退出状态码

正常状态下,Python 代码正常运行完成,退出码是0。

Process finished with exit code 0

通过 sys.exit(n) 方法,可以自定义退出的状态码。

sys.exit(100)

执行后,退出状态码是传入的参数(传入一个整数)。

Process finished with exit code 100

sys.exit() 是没有返回值的,上面的结果一般是在 PyCharm 上运行结束时打印的结果,在命令行运行并不会打印。

sys.exit() 是代码的结束,执行到 sys.exit() 后,代码就会退出,后面的代码全部失效。

 

Python

 

 

以上是关于Python sys模块的使用的主要内容,如果未能解决你的问题,请参考以下文章

python模块之sys模块和序列化模块

Python Sys模块

Python sys模块

python的sys模块

Python模块-Sys

Python Sys模块