Skip to content

Commit cc521d2

Browse files
📚 增加关于运行脚本参数的详细说明,补充常用命令行选项及其用途,提升文档的实用性和可读性。
1 parent b70f1be commit cc521d2

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

docs/docs/Python/39模块.mdx

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ print(sys.argv)
172172
from .second_copy import *
173173
```
174174

175+
### 运行脚本的参数
176+
175177
两种运行脚本的方式,以及对应的输出:
176178

177179
1. **使用 `python -m top.second` 运行**
@@ -213,6 +215,77 @@ from .second_copy import *
213215
- **`sys.argv` 的值**:在这里,`sys.argv[0]` 是命令行中提供的路径,即 `top\second.py`(相对于当前工作目录 `C:\Users\jiang\Desktop`)。
214216
- `second.py` 打印这个值后,尝试执行相对导入时失败,因此程序终止,`second_copy.py` 的代码未被执行。
215217

218+
:::info
219+
`python -m` 的用途不止上文「在包结构里跑模块」这一种,实务里还常见:
220+
221+
- **绑定当前解释器**:用 `python -m pip``python -m venv` 安装包或建虚拟环境时,会强制使用**当前这条** `python` 对应的 pip / venv,避免 PATH 里多个 Python 时装到别的版本。
222+
- **把标准库当命令行工具用**:例如 `python -m http.server` 在当前目录提供静态文件服务;`python -m json.tool` 格式化 JSON;`python -m pdb 脚本.py` 调试;`python -m compileall` 批量生成字节码。模块名即入口,且不依赖额外脚本路径。
223+
224+
:::
225+
226+
227+
:::tip
228+
完整语法与全部开关见官方文档 [Command line and environment](https://docs.python.org/3/using/cmdline.html)。下面按类别整理常用项;**`-X`** 为 CPython 预留的**实现相关**开关,可用 `python --help-xoptions`(3.11+)查看本机支持的值,运行时也可查 [`sys._xoptions`](https://docs.python.org/3/library/sys.html#sys._xoptions)
229+
230+
**`-X`(CPython 常见取值,节选)**
231+
232+
| 形式 | 作用 |
233+
| --- | --- |
234+
| `-X faulthandler` | 启用 [`faulthandler`](https://docs.python.org/3/library/faulthandler.html),便于崩溃/卡死时打印 C 栈(等价环境变量 `PYTHONFAULTHANDLER`)。 |
235+
| `-X tracemalloc` / `-X tracemalloc=N` | 启动 [`tracemalloc`](https://docs.python.org/3/library/tracemalloc.html) 记录分配,`N` 为回溯帧数。 |
236+
| `-X importtime` / `-X importtime=2` | 打印各模块导入耗时(调性能、查慢导入);`2` 会标出已缓存的模块(3.14+)。 |
237+
| `-X dev` | 开启[开发模式](https://docs.python.org/3/library/devmode.html),额外运行时检查(等价 `PYTHONDEVMODE`)。 |
238+
| `-X utf8` / `-X utf8=0` | 显式开启或关闭 [UTF-8 模式](https://docs.python.org/3/library/os.html#utf8-mode)|
239+
| `-X pycache_prefix=PATH` |`.pyc` 写到指定目录树,不污染源码目录(等价 `PYTHONPYCACHEPREFIX`)。 |
240+
241+
其余如 `-X int_max_str_digits``-X perf`(Linux `perf`)、`-X gil=0` / `-X gil=1`(仅 free-threaded 构建)等以当前 Python 版本的 `--help-xoptions` 为准。
242+
243+
---
244+
245+
**1. 接口选项(Interface options)** — 决定解释器**如何找到并运行代码**`[-c command | -m module-name | script | -]` 与后面的 `args` 分界:接口选项之后的参数会进入 `sys.argv`
246+
247+
| 参数 | 作用 | 示例 |
248+
| --- | --- | --- |
249+
| `-c <command>` | 执行字符串中的 Python 代码(可多行,前导空白有意义)。 | `python -c "print('Hello')"` |
250+
| `-m <module>` |`sys.path` 中查找模块并以 `__main__` 运行(包则运行 `.__main__`)。 | `python -m http.server` |
251+
| `<script>` | 运行指定路径的脚本,或含 `__main__.py` 的目录/zip。 | `python main.py` |
252+
| `-` | 从标准输入读代码;若 stdin 是终端则隐含交互。 | 见下(管道把 stdin 交给 `python -`|
253+
254+
```bash
255+
echo "print(1)" | python -
256+
```
257+
258+
---
259+
260+
**2. 行为控制选项(Miscellaneous options)** — 调试、优化、环境与安全。
261+
262+
- **调试与警告**`-v` 每次初始化模块时打印加载位置;`-vv` 更细;`-W <arg>` 控制警告(如 `python -W error` 将警告视为异常,`python -W ignore` 忽略);`-i` 在脚本、`-c``-m` 执行完后进入交互,便于查变量或栈。
263+
- **性能与字节码**`-O` 去掉 `assert` 与依赖 `__debug__` 的代码;`-OO` 再去掉 docstring;`-B` 不写 `.pyc`,避免污染目录。
264+
- **环境与安全**`-E` 忽略所有 `PYTHON*` 环境变量;`-I` **隔离模式**,隐含 `-E``-P``-s``sys.path` 不含当前目录/脚本目录与用户 site(比 `-E` 更彻底);`-u` 让 stdout/stderr 不缓冲,容器里看日志常用;`-s` 不把用户级 site-packages 加入 `sys.path`
265+
266+
---
267+
268+
**3. 通用信息选项(Generic options)**
269+
270+
- `-h` / `--help`:简短列出所有命令行选项(3.11+ 还有 `--help-env``--help-xoptions``--help-all`)。
271+
- `-V` / `--version`:版本号;**写两次** `-VV` 输出构建信息(编译器等)。
272+
273+
---
274+
275+
**快速对照(常见场景)**
276+
277+
| 场景 | 建议 |
278+
| --- | --- |
279+
| 日志要实时、不要缓冲 | `python -u script.py` |
280+
| 怀疑环境/`PYTHONPATH` 污染或库冲突 | `python -I script.py` |
281+
| 希望警告直接变成报错 | `python -W error script.py` |
282+
| 跑标准库或项目提供的 CLI 入口 | `python -m <module>`(如 `python -m venv venv`|
283+
| 分析导入耗时 | `python -X importtime -c "import yourpackage"` |
284+
285+
**Docker、systemd、K8s** 等环境里,`python -u` 很常见;排查「为什么本地能跑、服务器不行」时,`python -I` 或临时 `python -E` 有助于确认是否被环境变量或路径劫持。
286+
:::
287+
288+
216289
### \_\_main\_\_.py
217290

218291
接下来我们添加一个`__main__.py`文件。它相当于是为包提供一个脚本入口。

0 commit comments

Comments
 (0)