2. 使用 Python 的解释器
启动 REPL、-c/-m 与脚本参数 sys.argv、交互提示符与源文件编码声明——对齐 Node REPL 与 CLI 心智。
2.1 启动解释器
-
常见命令(具体可执行名随安装方式变化)
- Unix/Linux/macOS:终端里常用
python3或带小版本python3.12 - Windows:安装器常注册
python/py启动器
- Unix/Linux/macOS:终端里常用
-
退出
- Unix:
Ctrl+D(EOF) - Windows:
Ctrl+Z后回车;或任何系统quit()
- Unix:
-
三种常用启动形态(可对标
node、node -e、node script.js)- 交互式:直接输入
python3,提示符下逐条执行。 - 执行一串代码:
python3 -c "print(1+1)"(注意 shell 引号转义)。 - 以模块方式跑:
python3 -m pip/python3 -m http.server(sys.path[0]常被置为当前工作目录,包内相对导入更安全)。
- 交互式:直接输入
-
脚本跑完后进入交互:
python3 -i script.py(便于检查脚本留下的命名空间,类似在调试器外多停一会儿)。 -
行编辑:若安装带 Readline,多支持历史与补全;
Ctrl+P若出现上一行历史,多半已启用。
# 等价心智:node app.js ↔ python app.py
# 一行执行:node -e "console.log(1+1)" ↔ python -c "print(1+1)"
python -c "import sys; print(sys.version)"2.2 命令行参数:sys.argv
sys.argv 是所有参数的字符串列表。它不是「已经解析好的选项对象」,复杂 CLI 交给 argparse(见标准库章)。
前端对照:接近 process.argv.slice(2) 再加上「脚本名 / -c 占位」这一段的差异。
| 场景 | sys.argv[0] | 其余 |
|---|---|---|
python script.py a b | script.py(或脚本的完整路径,依实现而定) | ['a','b',...] |
python -c "code" | 字符串 '-c' | -c 之后的参数 |
python -m pkg.mod a | 被解析模块的路径相关信息(别依赖格式做逻辑) | 跟在后面的参数 |
下面是一个「最小可运行」的 echo:把参数原样拼回去(演示切片,不是生产解析)。
import sys
def main() -> None:
# argv[0] 往往是脚本名;真实项目里用 argparse 处理 flags
print("argv:", sys.argv)
print("payload:", sys.argv[1:])
if __name__ == "__main__":
main()2.3 交互模式
- 主提示符
>>>;多行语句用...续行,直到块结束。 - 适合:验证 API、调试算法、当超级计算器。
- 不适合:维护复杂状态——正式逻辑放进
.py文件,用if __name__ == "__main__":做入口。
>>> x = [1, 2, 3]
>>> sum(n * n for n in x)
142.4 源文件编码
- 默认 UTF-8(Python 3),可直接写中文注释。
- 若必须用其它编码,可在文件前二行内声明:
# -*- coding: cp1252 -*-- 若第一行是 shebang
#!/usr/bin/env python3,编码声明放在第二行即可。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
print("hello")2.5 速记
| 你想做 | 命令形态 |
|---|---|
| 临时试两行 | 直接开 REPL 或 python -c "..." |
| 把仓库当包跑入口 | python -m yourpkg.cli(减少 PYTHONPATH 手工折腾) |
| 跑完脚本留在环境里 | python -i script.py |