Python常用标准库及第三方库2-sys模块
一、sys模块简介
前面介绍的os模块主要面向操作系统,而本篇的sys模块则主要针对的是Python解释器。
sys模块是Python自带的模块,它是与Python解释器交互的一个接口。sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分。
二、sys模块常用方法
通过dir()方法可以查看sys模块中带有哪些方法:
import sys print(dir(sys))
1.sys.argv-获取命令行参数
sys.argv作用是实现从程序外部向程序传递参数,它能够获取命令行参数列表。argv列表包含了所有传递给脚本的参数:
- sys.argv[0]:表示程序自身
- sys.argv[1]:表示程序的第一个参数
- sys.argv[2]:表示程序的第二个参数
import sys for index, arg in enumerate(sys.argv): print(index, arg)
在Python命令行执行此脚本文件(未带任何参数时),获取到的第一个元素是脚本本身。打印结果为:
在Python命令行执行此脚本文件(带参数时),获取到的第一个元素是脚本本身,其余的是传递来的参数。打印结果为:
2.sys.exit(n)-退出程序
sys.exit() 基本原理
sys.exit(n):
- 当n为0时:正常退出
- 当n不等于0时,非正常退出,会引发SystemExit的异常
一般情况下,程序执行到末尾、解释器就会自动退出。此时代码里并没有调用sys.exit(0),但实际Python解释器在运行时调用sys.exit(0),运行后PyCharm编辑器会自动提示“Process finished with exit code 0”,如下:
而当代码里调用了sys.exit(888),即传入一个非0的整数,此时运行后PyCharm编辑器会提示“Process finished with exit code 888”,如下:
而当在代码里调用了sys.exit(n)后,表示程序会退出,不管n是否等于0 ,即不管是正常退出还是异常退出,其后的语句都不会执行,也就是不会执行"print("Python sys.exit() 用法示例")"这句。从下面的图中也能看出,sys.exit(888)后的语句在PyCharm编辑器中已经泛黄提示(正常语法规范的话是不会泛黄提示的),并且运行结果也确实没有执行sys.exit(888)后的语句:
sys.exit() 适用场景-控制程序中途退出
一般情况下,执行到主程序末尾,解释器就会自动退出。上面的例子已经告诉我们,如果想要中途退出,先调用sys.exit(),再调用其他语句是行不通的,编辑器会警告提示。
如果想要自由地控制程序是否在中途退出,可以使用"sys.exit(n)+捕获异常"的方式。其中,n可以是一个整数参数,也可以是字符串参数,当n为非0的值时,就会抛出SystemExit异常,可以在主程序中对其进行捕获:
# sys.exit()用法示例 def exit_function(value): print("sys.exit()捕获到的value是%s" % value) sys.exit(0) print("start sys") try: sys.exit(888) except SystemExit as value: exit_function(value=value) print("end sys")
① 程序中途退出示例
执行结果如下:
执行过程分析:
- 程序先执行print("start sys")
- 紧接着执行try语句,调用sys.exit(888)
- 随后捕获系统异常,捕获到的SystemExit异常的value值为888
- 最后调用exit_function函数,将value值888传递给exit_function函数
- 在exit_function函数中,执行语句、打印捕获到的value值,最后再调用sys.exit(0),退出程序
② 程序中途不退出示例
上个示例的执行结果可以看到在exit_function函数中调用sys.exit(0),此时程序就会退出,不会再执行print("end sys"),而当在exit_function函数中注释掉sys.exit(0),则会继续执行最后的代码print("end sys"),即:程序中途不退出,如下所示:
3.sys.platform-获取当前Python运行平台
基本用法
print(sys.platform)
Windows下运行:
Linux下运行:
除了sys.platform外,通过platform.system()也可以获取到当前系统平台:
Windows下运行:
Linux下运行:
适用场景
我们都知道Python是跨平台语言,只要操作系统安装了Python环境,那么同一份Python代码就可以既运行在Linux上,也可以运行在Windows上,亦或是Mac上。
而使用sys.platform或platform.system()获取到当前系统平台名称后,我们就可以针对性地作出不同操作,例如:
linux_content = "111111" windows_content = "222222" # 平台为Linux,执行逻辑1、发送文本1到指定邮件 if platform.system() == "Linux": send_email(linux_content) # 平台为Windows,执行逻辑2、发送文本2到指定邮件 elif platform.system() == "Windows": send_email(windows_content)
4.sys.path-返回Python相关路径
基本用法
sys.path是Python的搜索模块的路径集,供Python从中查找模块,返回一个list。
print(sys.path)
适用场景
如果是在IDE中执行Python程序,编译器会自动把当前项目的根目录加入到包查找路径中,可以理解为添加到环境变量下,所以直接执行是没有问题的。但是在cmd或是Terminal控制台中直接使用Python相关命令来执行程序,则不会自动将当前项目加入到PYTHONPATH环境变量下,如果涉及到import其他文件夹下的变量就会报类似"ModuleNotFoundError: No module named 'xxxx'"这样的错误。
解决方法:通过sys.path.append()方法将当前项目的根目录添加到系统环境变量中:
import sys root_path = os.path.dirname(os.path.realpath(__file__)) sys.path.append(root_path)
5.sys.stdin与sys.stdout
- Stdin:标准输入
- Stdout:标准输出
- Stderr:错误流
sys.stdin 与 input()
在Python中, input() 等价于 sys.stdin.readline()
① 先来看看使用input()的实现效果
# sys.stdin 与 input number = input("please input a number:") print("your input number is %s" % (number))
执行效果如下:
② 再来看看使用sys.stdin.readline()的实现效果
print("please input a number:",)# 逗号表示不换行 nn = sys.stdin.readline() print("your input number is %s" % (nn))
执行效果如下:
sys.stdout 与 print()
在Python中, print() 等价于 sys.stdout.readline()
① 先来看看使用print()的实现效果
# sys.stdout 与 print print("hello world")
执行效果如下:
② 再来看看使用sys.stdin.write()的实现效果
sys.stdout.write("hello world")
执行效果如下:
所以综上所述,input()+print() 结合的代码语句即可使用sys.stdin.readline()+sys.stdin.write()代替,如下:
sys.stdout.write("please input a number: n") number = sys.stdin.readline() sys.stdout.write("your input number is %s" % number)
执行效果如下:
6.sys模块其他用法
- sys.version:获取Python解释器版本
- sys.exc_info():返回异常信息三元元组
- sys.getdefaultencoding():获取系统当前编码,默认为utf-8
- sys.setdefaultencoding():设置系统的默认编码
- sys.getfilesystemencoding():获取文件系统使用编码方式,默认是utf-8
- sys.modules:以字典的形式返回所有当前Python环境中已经导入的模块
- sys.copyright:当前Python的版权信息
- sys.getrefcount(object):返回对象的引用数量
- sys.getrecursionlimit():返回Python最大递归深度,默认1000
- sys.getsizeof(object[, default]):返回对象的大小
- sys.getwindowsversion():返回当前windwos系统的版本信息
小结
sys模块是Python自带的模块,主要用于与Python解释器交互。它自带了很多方法或属性,其中:
1.sys.argv作用是实现从程序外部向程序传递参数,它能够获取命令行参数列表。argv列表包含了所有传递给脚本的参数:
- sys.argv[0]:表示程序自身
- sys.argv[1]:表示程序的第一个参数
- sys.argv[2]:表示程序的第二个参数
2.sys.exit(n)作用是退出程序:
- 当n为0时:正常退出
- 当n不等于0时,非正常退出,会引发SystemExit的异常
sys.exit(n)经常与捕获SystemExit异常一起使用,用来控制程序是否自由地中途退出;
3.sys.platform作用是获取当前Python运行平台,类似于platform.system(),常用来针对性地对不同操作系统作出不同的操作逻辑;
4.sys.path是Python的搜索模块的路径集,通过sys.path.append()方法将当前项目的根目录添加到系统环境变量中,可以用来解决找不到模块的报错情况;
5.在Python中, input() 等价于 sys.stdin.readline(),print() 等价于 sys.stdout.readline()。
以上是Python常用标准库及第三方库2-sys模块的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

用大多数文本编辑器即可打开XML文件;若需更直观的树状展示,可使用 XML 编辑器,如 Oxygen XML Editor 或 XMLSpy;在程序中处理 XML 数据则需使用编程语言(如 Python)与 XML 库(如 xml.etree.ElementTree)来解析。

没有简单、直接的免费手机端XML转PDF工具。需要的数据可视化过程涉及复杂的数据理解和渲染,市面上所谓的“免费”工具大多体验较差。推荐使用电脑端的工具或借助云服务,或自行开发App以获得更靠谱的转换效果。

无法找到一款将 XML 直接转换为 PDF 的应用程序,因为它们是两种根本不同的格式。XML 用于存储数据,而 PDF 用于显示文档。要完成转换,可以使用编程语言和库,例如 Python 和 ReportLab,来解析 XML 数据并生成 PDF 文档。

修改XML内容需要编程,因为它需要精准找到目标节点才能增删改查。编程语言有相应库来处理XML,提供API像操作数据库一样进行安全、高效、可控的操作。

XML格式化工具可以将代码按照规则排版,提高可读性和理解性。选择工具时,要注意自定义能力、对特殊情况的处理、性能和易用性。常用的工具类型包括在线工具、IDE插件和命令行工具。

不可能直接在手机上用单一应用完成 XML 到 PDF 的转换。需要使用云端服务,通过两步走的方式实现:1. 在云端转换 XML 为 PDF,2. 在手机端访问或下载转换后的 PDF 文件。

对于小型XML文件,可直接用文本编辑器替换注释内容;对于大型文件,建议借助XML解析器进行修改,确保效率和准确性。删除XML注释时需谨慎,保留注释通常有助于代码理解和维护。进阶技巧中提供了使用XML解析器修改注释的Python示例代码,但具体实现需根据使用的XML库进行调整。修改XML文件时注意编码问题,建议使用UTF-8编码并指定编码格式。

XML 美化本质上是提高其可读性,包括合理的缩进、换行和标签组织。其原理是通过遍历 XML 树,根据层级增加缩进,并处理空标签和包含文本的标签。Python 的 xml.etree.ElementTree 库提供了方便的 pretty_xml() 函数,可以实现上述美化过程。
