Python标准库sys常用函数、方法及代码实战解析【第108篇—标准库sys常用函数】

Python标准库sys常用函数、方法及代码实战解析

在Python的标准库中,sys 模块是一个常用而强大的工具,它提供了与Python解释器交互的函数和变量。本文将介绍sys模块的一些常用函数和方法,并通过实际的代码实例来解析它们的用法。

在这里插入图片描述

1. sys.argv - 命令行参数

sys.argv 是一个包含命令行参数的列表,其中第一个元素是脚本的名称。这在需要在命令行中接受用户输入时非常有用。

import sysdef main():# 打印脚本名称print("脚本名称:", sys.argv[0])# 打印命令行参数print("命令行参数:", sys.argv[1:])if __name__ == "__main__":main()

运行这个脚本并传入一些命令行参数:

python script.py arg1 arg2 arg3

输出:

脚本名称: script.py
命令行参数: ['arg1', 'arg2', 'arg3']

2. sys.exit - 退出程序

sys.exit() 函数用于退出程序,可以指定退出时的状态码。这对于在程序执行过程中发现错误或满足某些条件时需要中止程序时非常有用。

import sysdef main():# 模拟程序执行中的条件error_condition = Trueif error_condition:print("发生错误,程序即将退出")sys.exit(1)else:print("程序正常执行")if __name__ == "__main__":main()

3. sys.path - 模块搜索路径

sys.path 是一个包含模块搜索路径的列表。你可以通过它来控制Python解释器搜索模块的顺序。

import sys# 打印模块搜索路径
print("模块搜索路径:", sys.path)

4. sys.platform - 系统平台

sys.platform 返回一个字符串,表示当前系统平台。

import sys# 打印系统平台
print("系统平台:", sys.platform)

5. sys.version - Python版本信息

sys.version 返回一个包含Python版本信息的字符串。

import sys# 打印Python版本信息
print("Python版本信息:", sys.version)

以上是sys 模块中一些常用的函数和变量,通过这些功能,我们可以更灵活地控制程序的执行和与系统进行交互。在实际项目中,熟练掌握这些功能将使得编程更为高效。希望通过这篇文章的介绍,读者能够更深入地理解和应用sys 模块。

6. sys.stdin, sys.stdout, sys.stderr - 标准输入、输出和错误流

sys.stdinsys.stdoutsys.stderr 分别代表标准输入、标准输出和标准错误流。这些流可以被重定向,使得程序能够从不同的输入源读取数据,或将输出和错误信息导向不同的地方。

import sysdef main():# 从标准输入读取数据user_input = input("请输入内容: ")print("你输入的内容是:", user_input)# 将输出重定向到文件with open("output.txt", "w") as f:sys.stdout = fprint("这条信息将被写入到output.txt文件中")sys.stdout = sys.__stdout__  # 恢复标准输出# 模拟错误输出sys.stderr.write("这是一个错误信息\n")if __name__ == "__main__":main()

7. sys.modules - 已导入的模块

sys.modules 是一个字典,包含了当前解释器中已经导入的所有模块。可以用它来检查模块是否已经被导入,或者获取已经导入模块的信息。

import sys# 检查模块是否已导入
if 'math' in sys.modules:print("math模块已导入")
else:print("math模块未导入")

8. sys.getsizeof - 获取对象大小

sys.getsizeof() 函数可以返回对象的大小,以字节为单位。这对于检查内存占用非常有用。

import sysmy_list = [1, 2, 3, 4, 5]# 获取列表对象的大小
size = sys.getsizeof(my_list)
print("列表对象的大小:", size, "bytes")

9. sys.setdefaultencoding - 字符编码设置

sys.setdefaultencoding() 函数用于设置默认的字符编码,但在Python 3中已经被移除。在Python 3中,字符串都是Unicode,不再需要设置默认编码。

以上是sys模块中的一些常用函数和变量,通过这些功能,我们可以更好地控制程序的输入输出、处理异常情况以及了解已导入的模块信息。在实际的编程过程中,熟练使用这些功能可以提高代码的可维护性和性能。希望这篇文章能够帮助读者更深入地了解和应用sys模块。

10. sys.exc_info - 异常信息

sys.exc_info() 函数返回当前线程的异常信息。它返回一个包含异常类型、异常值和回溯信息的元组。这在处理异常时非常有用,可以获取异常的详细信息。

import sysdef divide(x, y):try:result = x / yexcept Exception:# 获取异常信息exc_type, exc_value, exc_traceback = sys.exc_info()print(f"发生异常: {exc_type}, {exc_value}")print("回溯信息:")for tb in traceback.format_tb(exc_traceback):print(tb)divide(10, 0)

11. sys.setrecursionlimit - 递归深度设置

sys.setrecursionlimit() 函数用于设置递归的最大深度。默认情况下,Python限制递归深度为1000,但可以通过此函数进行修改。

import sys# 设置递归深度为2000
sys.setrecursionlimit(2000)def recursive_function(count):if count > 0:print(f"递归深度: {count}")recursive_function(count - 1)recursive_function(1500)

12. sys.getrecursionlimit - 获取递归深度

sys.getrecursionlimit() 函数返回当前解释器的递归深度限制。

import sys# 获取当前递归深度限制
recursion_limit = sys.getrecursionlimit()
print("当前递归深度限制:", recursion_limit)

以上是 sys 模块中的一些更为高级的功能,它们能够在异常处理、递归深度控制等方面提供更灵活的选项。通过深入理解和运用这些功能,我们可以更好地调试程序、处理异常情况,并对程序执行的细节进行更精细的控制。希望这篇文章能够帮助读者更全面地了解和应用 sys 模块。

13. sys.settrace - 追踪函数调用

sys.settrace() 函数允许你设置一个跟踪函数,用于在每次函数被调用、返回或发生异常时执行自定义的代码。

import sysdef trace_calls(frame, event, arg):if event == 'call':print(f"调用函数 {frame.f_code.co_name}")elif event == 'return':print(f"返回函数 {frame.f_code.co_name}")return trace_callsdef foo():print("在foo函数中")def bar():print("在bar函数中")# 设置跟踪函数
sys.settrace(trace_calls)# 调用函数
foo()
bar()# 关闭跟踪函数
sys.settrace(None)

14. sys.getfilesystemencoding - 文件系统编码获取

sys.getfilesystemencoding() 函数返回用于解码文件名的文件系统编码。

import sys# 获取文件系统编码
filesystem_encoding = sys.getfilesystemencoding()
print("文件系统编码:", filesystem_encoding)

15. sys.setswitchinterval - 设置解释器的线程切换间隔

sys.setswitchinterval() 函数用于设置解释器的线程切换间隔,即解释器在多线程环境中进行线程切换的时间间隔。

import sys# 设置线程切换间隔为0.005秒
sys.setswitchinterval(0.005)

这些功能进一步展示了 sys 模块的灵活性和广泛应用。通过理解这些高级功能,我们能够更精细地控制程序的执行,处理更复杂的情况,并进行更深入的性能优化。希望这篇文章有助于读者更深入地学习和应用 sys 模块中的函数和方法。

16. sys.getrefcount - 获取对象引用计数

sys.getrefcount() 函数用于获取对象的引用计数,即有多少个变量引用了该对象。这在调试和检查内存泄漏时非常有用。

import sysmy_list = [1, 2, 3]# 获取列表对象的引用计数
ref_count = sys.getrefcount(my_list)
print("列表对象的引用计数:", ref_count)

17. sys.int_info - 整数对象信息

sys.int_info 是一个包含整数对象的一些信息的命名元组。它包括整数的位数、最大值和最小值等信息。

import sys# 打印整数对象信息
print("整数对象信息:", sys.int_info)

18. sys.float_info - 浮点数对象信息

sys.float_info 是一个包含浮点数对象的一些信息的命名元组。它包括浮点数的精度、最大值和最小值等信息。

import sys# 打印浮点数对象信息
print("浮点数对象信息:", sys.float_info)

19. sys.get_asyncgen_hooks - 异步生成器挂钩

sys.get_asyncgen_hooks() 函数返回当前的异步生成器挂钩。

import sys# 获取异步生成器挂钩
async_hooks = sys.get_asyncgen_hooks()
print("异步生成器挂钩:", async_hooks)

20. sys.get_coroutine_wrapper - 获取协程包装器

sys.get_coroutine_wrapper() 函数返回当前的协程包装器。

import sys# 获取协程包装器
coroutine_wrapper = sys.get_coroutine_wrapper()
print("协程包装器:", coroutine_wrapper)

通过这些功能,我们可以更深入地了解Python解释器的内部信息,包括对象的引用计数、整数和浮点数对象的信息,以及与异步生成器和协程相关的挂钩和包装器。这些信息对于调试和性能优化非常有帮助。希望本文的介绍能够帮助读者更全面地了解 sys 模块的功能和应用。

21. sys.getallocatedblocks - 获取分配的内存块数量

sys.getallocatedblocks() 函数返回当前Python进程已分配的内存块的数量。

import sys# 获取已分配的内存块数量
allocated_blocks = sys.getallocatedblocks()
print("已分配的内存块数量:", allocated_blocks)

22. sys.get_asyncgenfinalizer - 获取异步生成器终结器

sys.get_asyncgenfinalizer() 函数返回当前的异步生成器终结器。

import sys# 获取异步生成器终结器
asyncgen_finalizer = sys.get_asyncgenfinalizer()
print("异步生成器终结器:", asyncgen_finalizer)

23. sys.set_coroutine_wrapper - 设置协程包装器

sys.set_coroutine_wrapper() 函数用于设置协程包装器。

import sys# 设置协程包装器
sys.set_coroutine_wrapper(my_coroutine_wrapper)

24. sys.set_asyncgen_hooks - 设置异步生成器挂钩

sys.set_asyncgen_hooks() 函数用于设置异步生成器挂钩。

import sys# 设置异步生成器挂钩
sys.set_asyncgen_hooks(my_asyncgen_hooks)

25. sys.set_asyncgenfinalizer - 设置异步生成器终结器

sys.set_asyncgenfinalizer() 函数用于设置异步生成器终结器。

import sys# 设置异步生成器终结器
sys.set_asyncgenfinalizer(my_asyncgen_finalizer)

这些高级功能允许我们更深入地控制Python解释器的行为,包括内存管理、异步生成器的挂钩和终结器等。虽然这些功能可能在日常开发中用得不如前面提到的一些常用功能频繁,但在一些特殊情况下,它们提供了更高级的调优和控制选项。希望这篇文章对读者进一步探索 sys 模块的深层功能有所帮助。

总结:

在本文中,我们深入探讨了 Python 标准库中的 sys 模块,该模块提供了许多强大的功能,涵盖了多个方面的程序控制和系统交互。我们首先介绍了一些基础的 sys 模块常用函数,如命令行参数获取、程序退出、模块搜索路径等。通过实例代码,读者可以更好地理解和运用这些基础功能。

接着,我们深入研究了一些高级功能,如异常信息获取、递归深度控制、标准输入输出重定向等。这些功能在处理更复杂的程序逻辑和调试过程中发挥着重要作用。代码实例帮助读者更具体地理解了这些功能的使用方式。

最后,我们介绍了 sys 模块的一些较为高级的功能,如对象引用计数、整数和浮点数对象信息获取、异步生成器挂钩和终结器设置等。虽然这些功能在常规开发中不太常用,但在特殊场景下,它们提供了更高级的调优和控制选项,有助于更深入地理解 Python 解释器的内部机制。

通过阅读本文,读者可以更全面地了解和应用 sys 模块的丰富功能,从而提高编程的效率和程序的性能。希望本文能够成为读者学习 Python 编程语言中 sys 模块的有益指南。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.2.19

1.TCP模型 服务器端 #include <myhead.h> #define SER_IP "192.168.199.129" #define SER_PORT 8899int main(int argc, const char *argv[]) {//1.创建用于连接的套接字文件int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd-1){perror("socket error"…

react 原理揭秘

1.目标 A. 能够知道setState()更新数据是异步的 B. 能够知道JSX语法的转化过程 C. 能够说出React组件的更新机制 D. 能够对组件进行性能优化 E. 能够说出虚拟DOM和Diff算法 2.目录 A. setState()的说明 B. JSX语法的转化过程 C. 组件更新机制 D. 组件性能优化 E. 虚拟DOM和D…

[Vulnhub]靶场 Web Machine(N7)

kali:192.168.56.104 主机探测: arp-scan -l 靶机ip:192.168.56.104 端口扫描 nmap -p- 192.168.56.106 看一下web 目录扫描 gobuster dir -u http://192.168.56.106 -x html,txt,php,bak,zip --wordlist/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt exp…

【QT 5 +Linux下软件qt软件打包+qt生成软件创建可以安装压缩包+学习他人文章+第三篇:学习打包】

【QT 5 Linux下软件qt软件打包qt生成软件创建可以安装压缩包学习他人文章第三篇&#xff1a;学习打包】 1、前言2、实验环境3、自我学习总结-本篇总结&#xff08;1&#xff09;了解安装包的目录结构&#xff08;2&#xff09;了解要编写文件与编写脚本1. control文件2. postin…

NVMFS5113PLWFT1G汽车级功率MOSFET 60V 10A/64A满足AEC-Q101标准

AEC-Q101认证标准详细解读&#xff1a; AEC-Q101是一种汽车电子元件可靠性标准&#xff0c;由汽车电子委员会&#xff08;Automotive Electronics Council&#xff0c;简称AEC&#xff09;制定。该标准旨在确保在汽车环境中使用的电子元件具有足够的可靠性和耐久性。 AEC-Q10…

探索JavaScript中的构造函数,巩固你的JavaScript基础

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

element-ui附件上传及在线查看详细总结,后续赋源码

一、附件上传 1、在element-ui上面复制相应代码 a、accept"image/*,.pdf,.docx,.xlsx,.doc,.xls" 是规定上传文件的类型&#xff0c;若是不限制&#xff0c;可以直接将accept‘all即可&#xff1b; b、:action"action" 这个属性就是你的上传附件的地址&am…

如何解决局域网tcp延迟高来进行安全快速内外网传输呢?

在当今企业运营中&#xff0c;数据的快速流通变得至关重要&#xff0c;但局域网内的TCP延迟问题却成为了数据传输的障碍。本文旨在分析局域网TCP延迟的成因&#xff0c;并探讨几种企业数据传输的常见模式&#xff0c;以及如何为企业选择合适的传输策略&#xff0c;以确保数据在…

java之servlet

动态的web资源开发技术 不同的用户&#xff0c;或者携带不同的参数&#xff0c;访问服务器 服务器添加判断层&#xff0c;实现访问不同的web资源

【iOS ARKit】协作 Session 实例

协作 Session 使用注意事项 协作 Session 是在 ARWorldMap 基础上发展起来的技术&#xff0c;ARWorldMap 包含了一系列的地标、ARAnchor 及在观察这些地标和 ARAnchor 时摄像机的视场&#xff08;View&#xff09;。如果用户在某一个位置新创建了一个 ARAnchor&#xff0c;这时…

禅道安装与使用

文章目录 1.下载2.安装 1.下载 进入禅道官网下载 2.安装 登录后

uniapp生成app包引导用户开启通知权限和热更新

uniapp生成app包引导用户开启通知权限和热更新 引导用户开启通知权限 export function setPermissions() {// #ifdef APP-PLUS if (plus.os.name Android) {var main plus.android.runtimeMainActivity();var pkName main.getPackageName();var uid main.getApplicationI…

【免费】两阶段鲁棒优化matlab实现——CCG和benders

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序采用matlab复现经典论文《Solving two-stage robust optimization problems using a column-and-constraint generation method》算例&#xff0c;实现了C&CG和benders算法两部分内容&#xff0c;通过…

1.3 vue ui框架-element-ui框架

1 前言 ElementUI是一套基于VUE2.0的桌面端组件库&#xff0c;ElementUI提供了丰富的组件帮助开发人员快速构建功能强大、风格统一的页面。 ElementUI官网 https://element.eleme.io 2 安装 运行命令 cnpm i element-ui -S -S表示只在该项目下安装&#xff0c;不是全局安…

基于YOLOv8深度学习的复杂场景下船舶目标检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

GL绘制自定义线条4_使用OpenGL ES实现钢笔效果

在以前的文章里http://t.csdnimg.cn/TgCtl&#xff0c;我简述了如何使用OpenGL ES实现光滑的粗线条的绘制效果&#xff0c;在闲暇时间我把它再进一步进化&#xff0c;实现了端点长度按照压感大小实现伸缩的逻辑&#xff0c;从而实现了如下的笔锋效果&#xff1a; 书写过程中的效…

包管理工具之npm也慌了?

起因 因为npm的种种问题,我很早就换成了pnpm和yarn(但是其实npm也在使用),已经很久没有关注npm的功能更新了。最近无意间进入Node18版本的安装目录,发现其除了常规的node,npm等默认安装了一个新的包corepack,这个就是今天我要分享的东西了。 注: 我因为18版本的node上…

【STM32】STM32学习笔记-FLASH闪存(48)

00. 目录 文章目录 00. 目录01. FLASH简介02. 闪存模块组织03. FLASH基本结构04. FLASH解锁05. 使用指针访问存储器06. 程序存储器编程07. 选项字节08. 选项字节编程09. 选项字节擦除10. 器件电子签名11. 附录 01. FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选…

灰度负载均衡和普通负载均衡有什么区别

灰度负载均衡&#xff08;Gray Load Balancing&#xff09;与普通负载均衡的主要区别在于它们服务发布和流量管理的方式。 灰度负载均衡 目的&#xff1a;主要用于灰度发布&#xff0c;即逐步向用户发布新版本的服务&#xff0c;以减少新版本可能带来的风险。工作方式&#x…

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点&#xff0c;然后把连接这些对象的链表示为图的弧&#xff0c;最后用对象发送和接收的消…