1. 命令行与环境 (original) (raw)

为获取各种设置信息,CPython 解析器会扫描命令行与环境。

其他实现的命令行方案可能会有所不同。 详见 其他实现

1.1. 命令行

调用 Python 时,可以指定下列任意选项:

python [-bBdEhiIOPqRsSuvVWx?] [-c command | -m module-name | script | - ] [args]

最常见的用例是启动时执行脚本:

1.1.1. 接口选项

解释器接口类似于 UNIX shell,但提供了额外的调用方法:

非交互模式下,先解析全部输入,再执行。

接口选项会终结解释器读入的选项列表,所有后续参数都在 sys.argv 里 -- 注意,首个元素,即下标为零的元素(sys.argv[0])是表示程序来源的字符串。

-c

执行 command 中的 Python 代码。command 可以是一条语句,也可以是用换行符分隔的多条语句,其中,前导空白字符与普通模块代码中的作用一样。

使用此选项时,sys.argv 的首个元素为 "-c",并会把当前目录加入至 sys.path 开头(让该目录中的模块作为顶层模块导入)。

引发一个 审计事件 cpython.run_command 并附带参数 command

-m

sys.path 中搜索指定模块,并以 __main__ 模块执行其内容。

该参数是 _模块名_,请勿输入文件扩展名(.py)。模块名应为有效的绝对 Python 模块名,但本实现对此不作强制要求(例如,允许使用含连字符 - 的名称)。

包名称(包括命名空间包)也允许使用。使用包名称而不是普通模块名时,解释器把 <pkg>.__main__ 作为主模块执行。此行为特意被设计为与作为脚本参数传递给解释器的目录和 zip 文件的处理方式类似。

备注

此选项不适用于内置模块和以 C 编写的扩展模块,因为它们并没有对应的 Python 模块文件。 但是它仍然适用于预编译的模块,即使没有可用的初始源文件。

如果给出此选项,sys.argv 的首个元素将为模块文件的完整路径 (在定位模块文件期间,首个元素将设为 "-m")。 与 -c 选项一样,当前目录将被加入 sys.path 的开头。

-I 选项可用来在隔离模式下运行脚本,此模式中 sys.path 既不包含当前目录也不包含用户的 site-packages 目录。 所有 PYTHON* 环境变量也都会被忽略。

许多标准库模块都包含在执行时,以脚本方式调用的代码。例如 timeit 模块:

python -m timeit -s "setup here" "benchmarked code here" python -m timeit -h # 获取详情

引发一个 审计事件 cpython.run_module 并附带参数 module-name

在 3.1 版本发生变更: 提供包名称来运行 __main__ 子模块。

在 3.4 版本发生变更: 同样支持命名空间包

-

从标准输入 (sys.stdin) 读取命令。标准输入为终端时,使用 -i

使用此选项时,sys.argv 的第一个元素是 "-", 同时,把当前目录加入 sys.path 开头。

引发一个不带参数的 审计事件 cpython.run_stdin