sys 模块提供了访问程序运行时环境的函数和值,例如命令行参数 sys.argv 或用于从程序流程的任何位置终止当前进程的函数 sys.exit()。尽管它被清晰地划分为一个模块,但实际上它是内置的,因此在正常情况下,它始终可用。
1、 命令行参数
if len(sys.argv) != 4: # 脚本名称也需要被计入。
raise RuntimeError("预期有 3 个命令行参数")
f = open(sys.argv[1], 'rb') # 使用第一个命令行参数。
start_line = int(sys.argv[2]) # 所有参数都以字符串形式传递,因此如果需要其他类型,则需要显式转换。
end_line = int(sys.argv[3]) # 同上。
注意,在更大、更完善的程序中,您会使用像 click 这样的模块来处理命令行参数,而不是自己编写代码。
2、 脚本名称
# 执行的脚本名称位于 argv 列表的开头。
print('用法:', sys.argv[0], '<文件名> <开始> <结束>')
# 您可以使用它来生成执行程序的路径前缀(而不是当前模块),
# 以便访问相对路径的文件,这对于游戏中的资源文件来说很有用。
program_file = sys.argv[0]
import pathlib
program_path = pathlib.Path(program_file).resolve().parent
3、标准错误流
# 如果可能的话,错误消息不应输出到标准输出。
print('错误:我们没有奶酪了。', file=sys.stderr)
try:
f = open('不存在的文件.xyz', 'rb')
except OSError as e:
print(e, file=sys.stderr)
4、提前终止进程并返回退出代码
def main():
if len(sys.argv) != 4 or '--help' in sys.argv[1:]:
print('用法:my_program <arg1> <arg2> <arg3>', file=sys.stderr)
sys.exit(1) # 使用退出代码来表示程序未成功运行。
process_data()