Python模块 B-01 系统操作模块(系统内置)-sys模块介绍

mac2022-06-30  30

系统操作模块(系统内置)-sys模块介绍

文章目录

系统操作模块(系统内置)-sys模块介绍一、模块介绍1.1、模块作用1.2、模块安装与导入 二、模块属性和方法介绍1.1、模块属性和方法列举1.2、模块属性和方法具体示例与说明-常用sys.platform代码示例说明 sys.version代码示例说明 sys.path代码示例说明 sys.modules代码示例说明 sys.exc_info()代码示例说明 sys.argv代码示例说明 sys.exit(n)代码示例说明 sys.stdout.write(str)代码示例说明补充应用

一、模块介绍

1.1、模块作用

Python的sys模块负责导出与Python解释器本身相关的组件(如模块搜索路径),提供访问由解释器使用或维护的变量的接口,并提供了一些函数用来和解释器进行交互,操控Python的运行时环境。

1.2、模块安装与导入

系统内置,直接导入

import sys

二、模块属性和方法介绍

下面就来详细介绍下该模块中常用的属性和方法。

1.1、模块属性和方法列举

类别模块方法与变量作用备注解释器平台环境sys.platform返回解释器程序所在平台标识符字符串常用-静态对象sys.prefix返回安装平台无关Python文件的目录静态对象sys.executablePython解释器可执行文件的绝对路径静态对象解释器版本相关sys.version获取Python解释程序的版本信息常用-静态对象sys.version_info当前解释器版本的命名元组静态对象sys.api_version返回表示Python解释器的C语言版本API的整数静态对象sys.hexversion对sys.version_info中包含的版本信息进行编码后使用十六进制表示的整数静态对象sys.copyright包含解释器版权相关信息的字符串静态对象解释器库与模块相关sys.exec_prefix用于查找特定于当前机器的python库的路径前缀sys.path返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值sys.modules已加载模块表sys.builtin_module_names当前解释器所有内置模块的名称解释器与执行文件相关sys.argv命令行参数List,第一个元素是程序本身路径sys.exit(n)退出程序,正常退出时exit(0)解释器数据结构相关sys.maxint获取支持的最大的Int值sys.maxsize返回字符串、列表、字典和其他内置类型的最大长度sys.maxunicode返回能够表示的最大Unicode码点的整数值sys.implementation包含有关Python实现的相关信息sys.int_info包含有关整形实现的信息的结构序列sys.float_info包含有关浮点数实现的信息的结构序列sys.thread_info包含有关线程实现的信息的结构序列sys.hash_info包含哈希算法相关信息的结构序列sys.byteorder本机的字节排序方式,little表示小尾,big表示大尾sys.float_repr_style表示浮点数的repr()方法的输出样式的字符串标准流相关sys.stdout输出sys.stdin输入sys.stderror错误输出递归相关sys.getrecursionlimit()#获取最大递归层数sys.setrecursionlimit(1200)#设置最大递归层数编码相关sys.getdefaultencoding()#获取解释器默认编码sys.getfilesystemencoding#获取内存数据存到文件里的默认编码异常处理相关sys.exc_info()获取正在处理的异常的相关信息sys.last_type返回最近一次捕获的异常的类型(只在交互式环境下可用 )sys.last_value返回最近一次捕获的异常的值(只在交互式环境下可用)sys.last_traceback返回最近一次捕获的异常的追踪信息(只在交互式环境下可用)

1.2、模块属性和方法具体示例与说明-常用

sys.platform

代码示例
>>> sys.platform 'darwin'
说明

对除了linux的Unix系统, 是uname -s 的返回值和uname -r 版本合并的小写形式,例如linux2指的是使用2.x.x版本的linux系统。由于包含了系统版本,故推荐的使用方法是借助startwith 函数。

if sys.platform.startwith('linux') # linux 代码 pass elif sys.platform.startwith('freebsd') # freebsd 代码 pass

返回值参考下

系统platform值window’win32‘linux’linux‘Windows/Cygwin‘cygwin’Mac OS X‘darwin’

sys.version

代码示例
>>> sys.version '3.7.2 (default, Feb 12 2019, 08:15:36) \n[Clang 10.0.0 (clang-1000.11.45.5)]'
说明

sys.path

sys.path是一个由目录名称字符串组成的列表,每个目录名称字符串代表正在运行的Python解释器的真正的搜索路径。该列表在解释器启动时根据PYTHONPATH设置进行初始化。

代码示例
>>> sys.path ['', '/Users/huangdongdong/.local/share/virtualenvs/My_Python-trbyZ-cn/lib/python37.zip', '/Users/huangdongdong/.local/share/virtualenvs/My_Python-trbyZ-cn/lib/python3.7', '/Users/huangdongdong/.local/share/virtualenvs/My_Python-trbyZ-cn/lib/python3.7/lib-dynload', '/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Users/huangdongdong/.local/share/virtualenvs/My_Python-trbyZ-cn/lib/python3.7/site-packages']
说明

注意:sys.path[0] 表示当前脚本所在目录。在交互模式下,sys.path[0] 返回空字符串。

sys.modules

sys.modules是一个字典,你的Python会话或程序(准确的说是Python进程)所导入的每个模块在其中都一个name:module项:

代码示例
>>> sys.modules {'sys': <module 'sys' (built-in)>, 'builtins': <module 'builtins' (built-in)>, '_frozen_importlib': <module '_frozen_importlib' (frozen)>, '_imp': <module '_imp' (built-in)>, '_thread': <module '_thread' (built-in)>,}
说明

可以像一般的字典一样进行各种字典操作。

sys.exc_info()

获取正在处理的异常的相关信息,返回值为一个包含异常类、异常实例和异常回溯信息的元组。

代码示例
>>> import sys >>> s = 'abc' ... try: ... int(s) ... except ValueError: ... e = sys.exc_info() >>> type(e) <class 'tuple'> >>> exc_type, exc_value, exc_traceback = e >>> exc_type <class 'ValueError'> >>> exc_value ValueError("invalid literal for int() with base 10: 'abc'") >>> exc_value.args[0] "invalid literal for int() with base 10: 'abc'" >>> exc_traceback <traceback object at 0x103a4d948> >>> dir(exc_traceback) ['tb_frame', 'tb_lasti', 'tb_lineno', 'tb_next'] >>> exc_traceback.tb_frame <frame at 0x103bf4a98, file '<stdin>', line 4, code <module>> >>> exc_traceback.tb_lasti 6 >>> exc_traceback.tb_lineno 2 >>> exc_traceback.tb_next >>> Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'argv' is not defined >>> sys.last_type <class 'NameError'> >>> sys.last_value NameError("name 'argv' is not defined") >>> sys.last_traceback <traceback object at 0x103d38248>
说明

sys.argv

sys.argv 传递给程序的命令行参数列表;其中,sys.argv[0]表示脚本名称,各个参数均为字符串类型。

代码示例

写一个脚本,内容如下

import sys # filename:argv_test.py for i in range(len(sys.argv)): print('argv{0}: type is {1}, value is {2}'.format(i, type(sys.argv[i]), sys.argv[i]))

在命令行下运行该脚本,并提供几个参数

python argv_test.py 1 a 2 b 3 c`

输出为:

argv0: type is <class 'str'>, value is argv_test.py argv1: type is <class 'str'>, value is 1 argv2: type is <class 'str'>, value is a argv3: type is <class 'str'>, value is 2 argv4: type is <class 'str'>, value is b argv5: type is <class 'str'>, value is 3 argv6: type is <class 'str'>, value is c
说明

sys.exit(n)

sys.exit(n) 通过引发SystemExit异常来退出当前程序,n是一个表示状态码的整数退出码。0值表示正常(默认值),非零值表示异常。如果n指定为一个非整数值,则将它打印到sys.stderr并使用退出码1退出。

代码示例
>>> sys.exit(0) # 执行后将退出交互模式 $ echo $? # 查看退出状态码 0 $ python # 重新进入python的交互模式 Python 3.7.0 (default, Jun 29 2018, 20:13:13) [Clang 9.1.0 (clang-902.0.39.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.exit(3) $ echo $? # 查看退出状态码 3 $ python # 重新进入python的交互模式 Python 3.7.0 (default, Jun 29 2018, 20:13:13) [Clang 9.1.0 (clang-902.0.39.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.exit(0.5) 0.5 $ echo $? # 查看退出状态码 1
说明

sys.stdout.write(str)

sys.stdout.write和print 都是输出相关的函数print内部也是调用的sys.stdout,sys.stdout默认输出是屏幕。

代码示例
import sys s = 'test stdout' print('--') sys.stdout.write(s) print('--') class A(object): pass print(A) sys.stdout.write(A)
说明

print 什么类型都可以输出,但是sys.stdout.write只可以输出字符串类型,否则报错。print默认是最后换行,但是sys.stdout.write默认不换行。 下面看我在百度找到的别人大佬写的一段代码:

import sys file = sys.stdout # 存储原始的输出对象 sys.stdout = open('1.txt', 'w') # 重定向所有的写入内容到 1.txt 文件, print('Citizen_Wang') # 写入到 1.txt 文件中,在上一行语句中改变了输出流到文件中 print('Always fall in love with neighbours') # 继续写入到文件中 sys.stdout.close() # 其实就是 open 文件之后的关闭 sys.stdout = file # 将 print 命令的结果返回给控制台 print('输出信息返回在控制台') # 该信息会在控制台也显示
补充应用

基于sys.stdout.flush()和sys.stdout.write()实现进度条效果

import sys import time print("downloading:") def view_bar(num, total): rate = float(num) / float(total) rate_num = int(rate * 100) r = "\r"+("="*(2*rate_num//10)+">")+(" "*(20-2*rate_num//10))+'%d%%' % (rate_num, ) sys.stdout.write(r) sys.stdout.flush() # 刷新缓冲区 if __name__ == '__main__': for i in range(0, 101): time.sleep(0.01) view_bar(i, 100) print("\ndownload successful\n")
最新回复(0)