
3.3.5 sys模块
sys模块是python系统特定的模块,而不是操作系统。通过sys模块可以访问python解释器的一些属性和方法,通过属性或方法获取或设置python解释器的状态。使用sys模块前需要用importsys语句把它导入进来。
1.argv属性
argv属性记录当前运行py文件时对应的py文件名和命令行参数。argv属性是一个字符串列表,第1个元素argv[0]是python解释器执行py文件的文件名,其他元素依次记录命令行参数,在不同环境下调用python解释器运行py文件,argv的值也有所不同。对于一个复杂的程序,在执行主程序时,往往需要输入一些参数值,这时argv记录这些参数值,通过argv传递给主程序参数,以决定主程序的运行方向和程序的参数,例如程序的界面风格。
在python的IDLE文件环境中输入下面的代码,并把代码保存到d盘根目录下的test. py文件中,运行代码后会得到argv的值为['D:/test.py']。

启动Windows的cmd窗口,输入命令python d:\test.pyp1=10p2=20 p3=50,将会得到如图3-3所示的结果。

图3-3 cmd窗口运行Python程序
2.path属性
path是一个字符串列表,记录python解释器查找的路径。当用import语句导入一个模块或包时,会在path指定的路径中搜索模块或包,如果要添加新的搜索路径,可以使用sys.path.append()方法。Path的值有些是来自环境变量PYTHONPATH的值,有些是默认的值。
3.modules属性和builtin_module_names属性
modules属性返回已经加载的模块名,builtin_module_names属性返回Python内置的模块名。modules的返回值是一个字典,通过keys()方法可以获取关键字的值,用values()方法可以返回关键字的值。
4.platform属性和version属性
platform属性返回操作系统标识符,例如Win32。version属性返回当前Python的版本号,如3.8.2。
5.stdin、stdout和stderr属性
stdin和stdout是Python的标准输入和输出,其中stdin是指除脚本之外的所有解释器输入,包括input()函数,stdout是指标准输出设备,通常指电脑屏幕,也可以修改成其他设备,例如一个文件;stderr是标准错误信息,解释器自己的提示和其他几乎所有的错误消息都会转到stderr。使用stdin或stdout的read()、readline()或readlines()方法可以从文件中读取数据,用write()或writelines()方法可以往文件中写数据。
下面的程序将d盘根目录下的sys_infor.txt文件作为标准的输出设备,print()函数和help()函数的输出信息都保存到文件中,而不会在电脑屏幕中显示出来。

6.executable和exec_prefix属性
executable返回Python的执行文件python.exe所在的路径和文件名,例如“D:\ ProgramFiles\Python39\python.exe”;exec_prefix只给出路径名,例如“D:\Program Files\Python39”。
7.exit([n])方法
当Python的解释器执行到sys.exit()语句时,若给exit()方法传递一个值为0的数据,解释器会认为程序是正常退出;如果传递非0(1~127)的数据,解释器会认为程序运行异常,同样需要退出。无论是哪种状态,exit()都会抛出一个异常SystemExit,如果这个异常没有被捕获(try…except语句),那么Python解释器将会退出,不会再执行sys.exit()之后的语句;如果有捕获此异常的代码,Python解释器不会马上退出,而是执行except语句,捕获这个异常可以做一些额外的清理工作,例如清除程序中生成的临时文件后再退出程序。可视化编程时,exit()方法通常用于主程序的最后一句,图形界面退出时,返回一个数值给exit(),可以用异常处理语句(try…except语句)来处理非正常退出,当然也可以不做任何工作,结束程序的运行。
下面的程序计算两个数的商,需要输入两个数,如果第2个数是0,则程序直接退出。
