创新互联Python教程:1. 命令行与环境

1. 命令行与环境

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

我们提供的服务有:成都网站设计、做网站、成都外贸网站建设公司、微信公众号开发、网站优化、网站认证、绛县ssl等。为成百上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的绛县网站制作公司

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

1.1. 命令行

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

 
 
 
 
  1. python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]

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

 
 
 
 
  1. python myscript.py

1.1.1. 接口选项

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

  • 用连接到 tty 设备的标准输入调用时,会提示输入并执行命令,输入 EOF (文件结束符,UNIX 中按 Ctrl-D,Windows 中按 Ctrl-Z, Enter)时终止。

  • 用文件名参数或以标准输入文件调用时,读取,并执行该脚本文件。

  • 用目录名参数调用时,从该目录读取、执行适当名称的脚本。

  • -c command 调用时,执行 command 表示的 Python 语句。command 可以包含用换行符分隔的多条语句。注意,前导空白字符在 Python 语句中非常重要!

  • -m module-name 调用时,在 Python 模块路径中查找指定的模块,并将其作为脚本执行。

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

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

-c

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

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

使用 command 参数会引发 审计事件 cpython.run_command

-m

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

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

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

备注

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

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

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

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

 
 
 
 
  1. python -m timeit -s 'setup here' 'benchmarked code here'
  2. python -m timeit -h # for details

使用 module-name 参数会引发 审计事件 cpython.run_module

参见

  • runpy.run_module()

    Python 代码可以直接使用的等效功能

PEP 338 — 将模块作为脚本执行

在 3.1 版更改: 提供包名称来运行 __main__ 子模块。

在 3.4 版更改: 同样支持命名空间包

-

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

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

没有参数时,会触发 审计事件 cpython.run_stdin