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

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

一、模块介绍

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值