Python sys 模块
最后修改日期:2024 年 7 月 15 日
在本文中,我们将介绍如何在 Python 中使用 sys 模块。sys 模块提供对系统特定参数和函数的访问,例如命令行参数、解释器设置和运行时环境详细信息。
sys 模块是 Python 标准库的一部分,通常用于执行以下任务:
- 访问命令行参数。
- 退出程序。
- 与 Python 解释器交互。
- 操作 Python 路径。
访问命令行参数
以下示例演示了如何使用 sys.argv 列表来访问传递给 Python 脚本的命令行参数。
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 程序。
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 版本和可执行文件路径。
import sys
def main():
print("Python version:", sys.version)
print("Python executable path:", sys.executable)
if __name__ == "__main__":
main()
在此程序中,sys.version 和 sys.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 路径,该路径用于定位模块。
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.stdout 和 sys.stderr 对象重定向标准输出和错误流。
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.stdout 和 sys.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 模块检索系统特定信息,例如平台和最大整数大小。
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.platform、sys.maxsize 和 sys.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 中的递归限制。
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.getrecursionlimit 和 sys.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 教程。