ZetCode

Python sys 模块

最后修改日期:2024 年 7 月 15 日

在本文中,我们将介绍如何在 Python 中使用 sys 模块。sys 模块提供对系统特定参数和函数的访问,例如命令行参数、解释器设置和运行时环境详细信息。

sys 模块是 Python 标准库的一部分,通常用于执行以下任务:

访问命令行参数

以下示例演示了如何使用 sys.argv 列表来访问传递给 Python 脚本的命令行参数。

main.py
import sys

def main():
    print("Script name:", sys.argv[0])  # The script name is always the first argument
    print("Arguments passed:", sys.argv[1:])  # Remaining arguments

if __name__ == "__main__":
    main()

在此程序中,sys.argv 列表用于访问脚本名称和传递给脚本的任何其他参数。

print("Script name:", sys.argv[0])

sys.argv 的第一个元素始终是脚本的名称。

print("Arguments passed:", sys.argv[1:])

sys.argv 的其余元素是传递给脚本的参数。

$ python main.py arg1 arg2 arg3
Script name: main.py
Arguments passed: ['arg1', 'arg2', 'arg3']

退出程序

以下示例演示了如何使用 sys.exit 函数以特定的退出码退出 Python 程序。

main.py
import sys

def main():
    print("Starting the program")
    sys.exit(1)  # Exit with code 1
    print("This will not be printed")

if __name__ == "__main__":
    main()

在此程序中,sys.exit 函数用于终止程序,退出码为 1。

sys.exit(1)

sys.exit 函数终止程序并将指定的退出码返回给操作系统。

$ python main.py
Starting the program

与 Python 解释器交互

以下示例演示了如何使用 sys 模块与 Python 解释器进行交互,例如检索 Python 版本和可执行文件路径。

main.py
import sys

def main():
    print("Python version:", sys.version)
    print("Python executable path:", sys.executable)

if __name__ == "__main__":
    main()

在此程序中,sys.versionsys.executable 属性分别用于检索 Python 版本和 Python 解释器的路径。

print("Python version:", sys.version)

sys.version 属性提供有关 Python 版本的信息。

print("Python executable path:", sys.executable)

sys.executable 属性提供 Python 解释器可执行文件的路径。

$ python main.py
Python version: 3.12.7 (tags/v3.12.7:0b05ead, Oct  1 2024, 03:06:41) [MSC v.1941 64 bit (AMD64)]
Python executable path: C:\Users\Jano\AppData\Local\Programs\Python\Python312\python.exe

操作 Python 路径

以下示例演示了如何使用 sys.path 列表来操作 Python 路径,该路径用于定位模块。

main.py
import sys

def main():
    print("Original Python path:", sys.path)
    sys.path.append("/custom/module/path")  # Add a custom path
    print("Updated Python path:", sys.path)

if __name__ == "__main__":
    main()

在此程序中,修改了 sys.path 列表以包含自定义模块路径。

sys.path.append("/custom/module/path")

修改了 sys.path 列表以包含 Python 将在此搜索模块的自定义路径。

重定向标准输出

以下示例演示了如何使用 sys.stdoutsys.stderr 对象重定向标准输出和错误流。

main.py
import sys

def main():
    # Redirect standard output to a file
    with open("output.txt", "w") as f:
        sys.stdout = f  # Redirect stdout to the file
        print("This will be written to output.txt")
        sys.stdout = sys.__stdout__  # Restore stdout

    # Redirect standard error to a file
    with open("error.txt", "w") as f:
        sys.stderr = f  # Redirect stderr to the file
        print("This will be written to error.txt", file=sys.stderr)
        sys.stderr = sys.__stderr__  # Restore stderr

    print("Output and error streams have been restored")

if __name__ == "__main__":
    main()

在此程序中,sys.stdoutsys.stderr 对象被临时重定向到文件。重定向后,将恢复原始流。

sys.stdout = f  # Redirect stdout to the file

sys.stdout 对象被临时替换为文件对象以重定向输出。

sys.stdout = sys.__stdout__  # Restore stdout

重定向后将恢复原始 sys.stdout

$ python main.py
Output and error streams have been restored
$ cat output.txt
This will be written to output.txt
$ cat error.txt
This will be written to error.txt

获取系统特定信息

以下示例演示了如何使用 sys 模块检索系统特定信息,例如平台和最大整数大小。

main.py
import sys

def main():
    print("Platform:", sys.platform)  # Operating system platform
    print("Maximum integer size:", sys.maxsize)  # Maximum size of integers
    print("Byte order:", sys.byteorder)  # Byte order (little-endian or big-endian)

if __name__ == "__main__":
    main()

在此程序中,sys.platformsys.maxsizesys.byteorder 属性用于检索系统特定信息。

print("Platform:", sys.platform)

sys.platform 属性提供有关操作系统平台的信息。

print("Maximum integer size:", sys.maxsize)

sys.maxsize 属性提供平台支持的最大整数大小。

print("Byte order:", sys.byteorder)

sys.byteorder 属性指示本地字节序(小端序或大端序)。

$ python main.py
Platform: linux
Maximum integer size: 9223372036854775807
Byte order: little

处理递归限制

以下示例演示了如何使用 sys 模块获取和设置 Python 中的递归限制。

main.py
import sys

def recursive_function(n):
    if n == 0:
        return
    recursive_function(n - 1)

def main():
    print("Current recursion limit:", sys.getrecursionlimit())  # Get current recursion limit
    sys.setrecursionlimit(2000)  # Set a new recursion limit
    print("New recursion limit:", sys.getrecursionlimit())

    try:
        recursive_function(1500)  # Test recursion
        print("Recursion completed successfully")
    except RecursionError:
        print("Recursion limit exceeded")

if __name__ == "__main__":
    main()

在此程序中,sys.getrecursionlimitsys.setrecursionlimit 函数用于获取和设置 Python 中的递归限制。

print("Current recursion limit:", sys.getrecursionlimit())

sys.getrecursionlimit 函数检索当前的递归限制。

sys.setrecursionlimit(2000)  # Set a new recursion limit

sys.setrecursionlimit 函数设置新的递归限制。

recursive_function(1500)  # Test recursion

调用递归函数来测试递归限制。

$ python main.py
Current recursion limit: 1000
New recursion limit: 2000
Recursion completed successfully

来源

Python sys 模块 - 文档

在本文中,我们介绍了如何在 Python 中使用 sys 模块执行系统特定任务。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有超过十年的经验。

列出所有 Python 教程