1. 简介
sys 模块是 Python 中的一个内置模块,它提供了对 Python 运行时环境的访问,包括 Python 解释器本身的变量和函数。这使得我们可以在 Python 程序中进行系统编程,例如读写文件、进程管理、环境变量等等。
2. 常用函数
2.1 sys.argv
sys.argv 是一个列表,其中包含程序启动时传递给 Python 解释器的所有命令行参数。第一个参数通常是程序本身的名称。例如:
import sys
print(sys.argv)
运行以上代码,输出结果为:
['test.py']
假设你已经将该文件保存为 test.py 并在命令行中运行,那么输出结果中只有一个元素:test.py,这是因为我们并没有传递其他参数。如果我们给它传递一些参数,在命令行中输入:
$ python test.py hello world
那么,sys.argv 就会包含这些参数:
['test.py', 'hello', 'world']
2.2 sys.path
sys.path 是一个 Python 搜索模块的路径列表。当你导入一个模块时,Python 解释器会搜索 sys.path 中的所有目录以寻找该模块。你可以使用 sys.path.append() 函数添加模块搜索路径:
import sys
sys.path.append('/path/to/your/module')
2.3 sys.exit()
sys.exit() 函数用于中止 Python 解释器。如果在主程序中使用它,它将终止整个程序。如果在子程序中使用它,则仅终止该子程序。
import sys
sys.exit()
2.4 sys.platform
sys.platform 属性包含一个标识符,表示 Python 解释器当前运行的平台,例如 'win32', 'linux' 等等。
import sys
print(sys.platform)
输出结果为:
win32
2.5 sys.version
sys.version 属性包含 Python 解释器在运行时的版本信息。这包括主要版本号、次要版本号和 patch 级别。
import sys
print(sys.version)
输出结果如下:
3.9.5 (default, May 4 2021, 03:36:27)
[GCC 8.4.0]
2.6 sys.stdin, sys.stdout, sys.stderr
sys.stdin、sys.stdout、sys.stderr 分别代表 Python 的标准输入、标准输出和标准错误流。默认情况下,它们分别代表控制台的输入、输出和错误流。
3. 实例演示
3.1 读取输入
在 Python 中,我们可以使用 sys.stdin 从控制台读取输入。以下是一个简单的示例程序:
import sys
for line in sys.stdin:
print(line.strip().upper())
上面的代码将读入来自标准输入的每一行文本,将其转换为大写字母并打印回标准输出。
3.2 处理数据流
在一个 Python 程序中,可以将 sys.stdin 和 sys.stdout 组合使用来处理数据流。例如,以下程序从标准输入读取一些文本,对其执行简单的操作并将结果写回到标准输出:
import sys
for line in sys.stdin:
line = line.strip()
if line:
sys.stdout.write(line[::-1] + '\n')
上面的代码将读入每一行输入,将其翻转后写回标准输出。
3.3 对错误输出重定向
Python 中的 sys.stderr 属性用于显示错误消息。我们可以通过以下程序将其输出重定向到文件中:
import sys
sys.stderr = open('logfile.txt', 'w')
try:
print(1/0)
except Exception as e:
print(e, file=sys.stderr)
上面的代码将在日志文件中记录错误信息,而不是在控制台中显示。
3.4 获取命令行参数
通过 sys.argv 可以获取命令行参数。以下是一个示例程序:
import sys
if len(sys.argv) > 1:
filename = sys.argv[1]
with open(filename) as f:
print(f.read())
else:
print("usage: python myscript.py filename")
上面的代码将读取文件名作为命令行参数,并在控制台中打印文件内容。如果未提供参数,则输出一条用法提示。
4. 总结
在 Python 中,sys 模块提供了许多有用的函数和属性,允许我们对程序、解释器和运行时环境进行访问和操作。我们可以使用 sys.argv 获取命令行参数,sys.path 添加模块搜索路径,sys.exit() 终止程序,sys.stdin、sys.stdout、sys.stderr 处理数据流,sys.platform 获取运行平台以及 sys.version 获取 Python 版本信息。