Python 的 sys 模块
学习 Python 中 sys 模块的用法
sys 模块提供了系统相关的参数和函数。我们将重点学习以下内容:
- sys.argv
- sys.executable
- sys.exit
- sys.modules
- sys.path
- sys.platform
- sys.stdin / stdout / stderr
sys.argv
sys.argv 的值是一个 Python 列表,包含传递给 Python 脚本的命令行参数。第一个参数 argv[0] 是脚本本身的名称。根据你运行的平台不同,第一个参数可能包含脚本的完整路径,也可能只包含文件名。建议查阅文档获取更多细节。
让我们通过几个例子来熟悉这个工具:
1import sys 2print(sys.argv)
sys.executable
sys.executable 的值是 Python 解释器的绝对路径。当你在别人的机器上工作时,这个信息非常有用,可以帮你确定 Python 的安装位置。在某些系统上,该命令可能失败并返回空字符串或 None。使用方法如下:
1import sys 2print(sys.executable)
sys.exit
sys.exit() 函数允许开发者退出 Python 程序。exit 函数接受一个可选参数,通常是一个整数,表示退出状态码。0 代表“成功退出”。请确保了解你操作系统对退出状态码的特殊含义,以便在自己的程序中遵循相应规范。需要注意的是,调用 exit 会引发 SystemExit 异常,这使得 try / except 块中的 finally 子句仍能正常执行清理操作。
来看一个调用示例:
1import sys 2sys.exit(0)
在 IDLE 中运行这段代码时,你会看到 SystemExit 错误被抛出。我们来创建几个脚本测试一下。首先创建一个主脚本(用于调用另一个 Python 脚本),命名为 "call_exit.py",内容如下:
1# call_exit.py 2import subprocess 3 4code = subprocess.call(["python.exe", "exit.py"]) 5print(code)
然后在同一目录下创建另一个 Python 脚本 "exit.py",内容如下:
1import sys 2 3sys.exit(0)
现在运行这段代码:
可以看到,我们编写的退出脚本返回了 0,说明执行成功。你也学会了如何从 Python 内部调用另一个 Python 脚本!
sys.path
sys.path 是一个字符串列表,指定了模块的搜索路径。它告诉 Python 在导入模块时应该查找哪些位置。根据 Python 文档,sys.path 由名为 PYTHONPATH 的环境变量初始化,并加上安装时的默认路径。我们来试一下:
1import sys 2print(sys.path)
这在调试模块无法导入的问题时非常有用。你还可以修改路径。由于它是列表,可以添加或删除路径。例如添加一个路径:
1sys.path.append("/path/to/my/module")
删除路径的部分留作读者练习。
sys.platform
sys.platform 的值是一个平台标识符。你可以利用它向 sys.path 添加特定平台的模块,根据平台导入不同的模块,或执行不同的代码逻辑。来看一个例子:
1import sys 2print(sys.platform)
这表明当前 Python 运行在 Windows 系统上。下面是一个实际应用示例:
1import sys 2os = sys.platform 3if os == "win32": 4 # 使用 Windows 相关代码 5 import _winreg 6elif os.startswith('linux'): 7 # 执行 Linux 特定操作 8 import subprocess 9 subprocess.Popen(["ls", "-l"])
上面的代码展示了如何判断当前操作系统。如果在 Windows 上,可以通过名为 _winreg 的 Python 模块读取注册表信息;如果在 Linux 上,则可能执行 ls 命令来查看当前目录的信息。
sys.stdin / stdout / stderr
stdin、stdout 和 stderr 分别对应解释器的标准输入、输出和错误流的文件对象。stdin 用于接收除脚本外的所有输入,而 stdout 用于 print 和 表达式 语句的输出。之所以提到这一点,是因为有时你需要将 stdout 或 stderr(或两者)重定向到文件,比如日志文件,或自定义 GUI 中的显示区域。虽然也可以重定向 stdin,但这种情况很少见。
总结
sys 模块中还有许多其他属性和方法。建议查阅 Python 官方文档第 27.1 节。本章你已掌握:如何退出 Python 程序、获取平台信息、处理命令行传入的参数等重要技能。