彩虹然

rainbow-ran

Python3.7之sys模块

sys.argv详见python文件操作笔记

1.sys.version

获取Python解释程序的版本信息
import sys


pythonVersion = sys.version
print(pythonVersion)

'''
3.7.4 (default, Aug 13 2019, 15:17:50) 
[Clang 4.0.1 (tags/RELEASE_401/final)]
'''

2.sys.exit(n)

退出程序,正常退出时exit(0)

a = 2
if a == 1:
    sys.exit(0)
else:
    sys.exit(2)
'''
Process finished with exit code 2
'''

3.sys.platform

返回操作系统平台名称
platformName = sys.platform
print(platformName)
'''
darwin
'''

为什么在Mac OS X上键入sys.platform时,输出是“darwin”?

答:因为Mac OS X的核心是 the Darwin OS

从链接的WikiPedia页面引用:

Darwin forms the core set of components upon which Mac OS X and iOS are based.

Python仅使用相同的平台标识符。

4.sys.modules

Python中所有加载到内存的模块都放在sys.modules。

sys.modules是一个全局字典,字典sys.modules对于加载模块起到了缓冲的作用,当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。

模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间

sys.modules[__name__]

A way to get a handle to the current running module in Python:

import sys

module = sys.modules[__name__]

it really only works if you are doing the whole sys.modules litany in the very module you want to get a handle to.

所以,getattr(sys.modules[__name__], func_name)的含义便是找到当前文件下名称为func_name的对象(类对象或者函数对象)。

5.sys.path.append()

添加路径,用于调用模块

当我们导入一个模块时:import xxx,默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中:

import sys
print(sys.path)

'''
['/Users/xiexinran/Desktop/乱七八糟的.py', '/Users/xiexinran/Desktop/乱七八糟的.py', '/Users/xiexinran/anaconda3/lib/python37.zip', '/Users/xiexinran/anaconda3/lib/python3.7', '/Users/xiexinran/anaconda3/lib/python3.7/lib-dynload', '/Users/xiexinran/anaconda3/lib/python3.7/site-packages', '/Users/xiexinran/anaconda3/lib/python3.7/site-packages/aeosa']

Process finished with exit code 0
'''

sys.path 返回的是一个列表。

该路径已经添加到系统的环境变量了,当我们要添加自己的搜索目录时,可以通过列表的append()方法;

对于模块和自己写的脚本不在同一个目录下,在脚本开头加sys.path.append('xxx'):

这种方法是运行时修改,脚本运行后就会失效。

posted @ 2020-02-16 09:59  彩虹然  阅读(881)  评论(0编辑  收藏  举报