怎么用Python -c在命令行直接运行单行代码

一只小鹿
一只小鹿
发布时间:2026-10-24 | 7人浏览过
原创

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,然后退出。整个过程不需要任何文件。

怎么用Python -c在命令行直接运行单行代码
图1:python -c 命令的语法组成与执行流程

引号的选择

外层引号和内层引号不能相同,否则 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 的工作。

怎么用Python -c在命令行直接运行单行代码
图2:python -c 的五类常见使用场景及典型命令

在 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 模块会正确处理转义和嵌套结构。

怎么用Python -c在命令行直接运行单行代码
图3:从输入命令到程序退出的完整执行步骤

容易遇到的问题

引号嵌套冲突——这是最常见的错误。如果外层和内层用了同一种引号,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在命令行直接运行单行代码
图4:Python四种运行方式的适用场景与局限对比

小结

python -c 的核心用法就是在终端输入 python -c "你的代码",让 Python 解释器直接执行引号里的内容。记住三个要点:外层引号和代码内引号交替使用;多条简单语句用分号连接;复合语句需要在引号内正确换行和缩进。这个选项最适合快速计算、查看环境信息、在 shell 脚本中嵌入少量 Python 逻辑。一旦代码超过几行或需要反复使用,就应该写成 .py 文件。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表