怎么用Python -c在命令行直接运行单行代码
Python 提供了一个 -c 选项,让你不用创建 .py 文件,直接在终端(命令行)中输入一小段 Python 代码并立即执行。只需要一条命令就能完成简单的计算、字符串处理或快速验证某个写法是否正确。这篇文章讲清楚它的语法、实际用法和容易踩到的问题。
基本语法
python -c 后面紧跟一段用引号包裹的 Python 代码,整体格式是:
python -c "你的Python代码"
这里的 python 是你系统中 Python 解释器的命令名称。有些系统上需要写 python3,取决于安装和配置。-c 是 Python 解释器的一个命令行选项,意思是"把后面的字符串当作 Python 程序来执行"。引号里的内容就是要运行的代码。
一个最简单的例子,在终端输入:
python -c "print('Hello')"
示例输出:
Hello
Python 解释器读取引号里的 print('Hello'),执行后在终端打印出 Hello,然后退出。整个过程不需要任何文件。
引号的选择
外层引号和内层引号不能相同,否则 shell 会提前截断你的代码。常见的做法是:
- 外层用双引号
",代码里的字符串用单引号':python -c "print('hello')" - 外层用单引号
',代码里的字符串用双引号":python -c 'print("hello")'
在 Linux 和 macOS 的终端里,外层用单引号更安全,因为单引号内的 $、! 等字符不会被 shell 解释。Windows 的 CMD 不认识单引号,必须用双引号包裹代码。PowerShell 两种引号都支持,但行为和 Bash 不完全一样,需要注意转义规则。
运行多条语句
如果想在一条 -c 命令里执行多条 Python 语句,有两种常用办法。
用分号分隔——分号在 Python 里可以把多条简单语句写在同一行:
python -c "x = 3; y = 4; print(x + y)"
示例输出:
7
用换行符 \n——在 Bash 中可以用 $'\n' 语法或者直接在引号里按回车换行。不过更实用的写法是借助分号,因为换行在不同 shell 之间兼容性差。
需要注意,分号不能用于复合语句(比如 if、for、def)的内部。如果想用 for 循环,可以这样写:
python -c "
for i in range(5):
print(i)
"
这种写法在引号里直接换行和缩进。shell 会把多行内容整体作为一个字符串传给 Python。缩进必须一致,否则会报 IndentationError。
实际使用场景
python -c 最适合那些"不值得专门写个文件"的小任务。下面是几个常见场景和对应的命令。
快速计算
python -c "print(2 ** 10)"
示例输出:
1024
查看模块版本或路径
python -c "import sys; print(sys.version)"
示例输出:
3.11.5 (main, Sep 11 2023, 08:19:27) [Clang 14.0.6]
python -c "import os; print(os.getcwd())"
这条命令打印当前工作目录,相当于 shell 的 pwd。
生成简单数据
python -c "import json; print(json.dumps({'name': 'test', 'count': 42}))"
示例输出:
{"name": "test", "count": 42}
配合管道处理文本
echo "hello world" | python -c "import sys; print(sys.stdin.read().upper())"
示例输出:
HELLO WORLD
管道把前一个命令的输出送给 Python 的标准输入,sys.stdin.read() 读取全部内容,.upper() 转为大写后打印。这种用法在 shell 脚本里可以替代一部分 awk 或 sed 的工作。
在 Shell 脚本中嵌入 Python 逻辑
python -c 还有一个实用的用途:在 Bash 脚本里借助 Python 完成 shell 不太擅长的工作,比如浮点运算、日期计算或 JSON 解析。
#!/bin/bash
size_mb=$(python3 -c "print(round($(stat -f%z myfile.txt) / 1024 / 1024, 2))")
echo "文件大小:${size_mb} MB"
这段脚本先用 stat 获取文件字节数,然后交给 Python 做除法并保留两位小数。$(python3 -c "...") 捕获 Python 的输出赋值给变量。
另一个例子,用 Python 解析 JSON 文件中的某个字段:
python3 -c "import json; data=json.load(open('config.json')); print(data['version'])"
这比在 shell 中用 grep 加正则从 JSON 里提取值要可靠得多,因为 Python 的 json 模块会正确处理转义和嵌套结构。
容易遇到的问题
引号嵌套冲突——这是最常见的错误。如果外层和内层用了同一种引号,shell 会在第二个引号处截断字符串,导致后半段被当作 shell 命令而非 Python 代码。解决办法就是内外引号交替使用。
特殊字符被 shell 解释——在双引号里,$、!、\ 等字符会被 Bash 先处理一遍。比如 python -c "print($HOME)" 不会打印字面量 $HOME,而是把 shell 变量 $HOME 的值替换进去。如果你希望 Python 拿到的就是字面文本,要么用单引号包裹,要么用反斜杠转义。
缩进错误——在引号内写多行代码时,缩进必须用统一的空格(或统一的Tab,但推荐空格)。不小心混用会触发 IndentationError,而且终端里排查缩进不如编辑器方便,所以复杂逻辑建议写成文件。
代码太长不适合 -c——-c 适合几条语句的快速任务。如果代码超过三四行,或者需要定义多个函数、处理异常,那写成 .py 文件再运行更合理,也更容易维护和调试。
与其他运行方式的对比
Python 代码可以通过多种方式运行,-c 只是其中之一。了解它们的区别能帮助你选择合适的方式。
交互式解释器(直接输入 python 进入 >>> 提示符)适合反复试验,可以逐行输入、查看结果。但它不方便在脚本中调用,也不容易重复执行同一段操作。
脚本文件(python script.py)适合任何规模的程序,支持完整的调试和版本管理。缺点是需要创建和管理文件。
python -c 介于两者之间:一次性执行、不留文件、可以嵌入 shell 脚本,但不适合复杂逻辑。
还有 python -m 模块名 用来直接运行已安装的模块,比如 python -m http.server 启动一个临时HTTP服务器,这跟 -c 的用途不同。
小结
python -c 的核心用法就是在终端输入 python -c "你的代码",让 Python 解释器直接执行引号里的内容。记住三个要点:外层引号和代码内引号交替使用;多条简单语句用分号连接;复合语句需要在引号内正确换行和缩进。这个选项最适合快速计算、查看环境信息、在 shell 脚本中嵌入少量 Python 逻辑。一旦代码超过几行或需要反复使用,就应该写成 .py 文件。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













