0Pricing
Python Academy · 课时

使用 subprocess 运行命令

执行外部程序

使用 subprocess 运行命令 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

什么是子进程模块?

subprocess 模块可以让您的 Python 程序运行外部命令和其他程序,就像在终端中输入这些命令一样。

import subprocess

result = subprocess.run(['echo', 'hello'])
print('return code:', result.returncode)

subprocess.run 基础

subprocess.run() 是推荐的入口。请将命令作为参数列表传入:第一个元素是程序名称,之后的每个元素分别表示一个参数。

import subprocess

result = subprocess.run(['echo', 'one', 'two'])
print('done with code', result.returncode)

为什么使用列表而不是字符串?

传入列表可以避免由 shell 解析命令,从而防止引号错误和 shell 注入风险。每个元素都是一个参数。

import subprocess

# Safe: each piece is its own argument
subprocess.run(['echo', 'a file with spaces.txt'])

CompletedProcess 对象

run() 会返回一个 CompletedProcess,其中包含 args、returncode 以及(如果捕获了输出)输出内容。返回码 0 表示成功。

import subprocess

cp = subprocess.run(['true'])
print('args:', cp.args)
print('returncode:', cp.returncode)

检查返回码

非零返回码通常表示命令失败。调用完成后,您可以手动检查返回码。

import subprocess

cp = subprocess.run(['ls', '/no/such/path'])
if cp.returncode != 0:
    print('command failed with', cp.returncode)

使用 check=True 在失败时引发异常

传入 check=True 后,如果命令以非零状态退出,run() 会自动引发 CalledProcessError。

import subprocess

try:
    subprocess.run(['false'], check=True)
except subprocess.CalledProcessError as e:
    print('failed with code', e.returncode)

传递参数

额外的命令参数就是列表中的更多元素。这里将目录内容以长格式列出。

import subprocess

subprocess.run(['echo', '-n', 'no newline'])
print()
print('above echo had -n flag')

设置 timeout

使用 timeout 可以中止运行时间过长的命令。它会引发 TimeoutExpired。

import subprocess

try:
    subprocess.run(['sleep', '5'], timeout=0.1)
except subprocess.TimeoutExpired:
    print('command took too long, aborted')

工作目录

cwd 参数会让命令在指定目录中运行,同时不会改变您自己的程序工作目录。

import subprocess

subprocess.run(['pwd'], cwd='/tmp')

shell=True 选项

使用 shell=True 时,请传入一个由 shell 解释的命令字符串。它支持管道和通配符,但处理不受信任的输入时存在风险。请优先使用列表形式。

import subprocess

subprocess.run('echo hello && echo world', shell=True)

避免使用 os.system

旧式的 os.system 只能返回退出码,也不提供安全的参数传递或输出捕获功能。对于所有新代码,请使用 subprocess.run 替代它。

import subprocess

# Modern, safe approach
cp = subprocess.run(['echo', 'modern way'])
print('exit code:', cp.returncode)

快速检查

请测试您对运行命令的理解。

总结

您已学会使用子进程运行命令:

  • subprocess.run([...]) 可以安全地运行外部程序。
  • 它会返回包含 returncode 的 CompletedProcess。
  • check=True 会在失败时引发异常;timeout 会中止运行缓慢的命令。
  • 请优先使用列表形式,而不是 shell=True。

下一步:捕获命令的输出。

常见问题解答

「使用 subprocess 运行命令」课时是免费的吗?

是的 — 「使用 subprocess 运行命令」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「使用 subprocess 运行命令」这节课中我会学到什么?

执行外部程序 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用 subprocess 运行命令」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 subprocess 运行命令
  2. 捕获输出
  3. 环境与 os 模块
  4. 使用 shutil 操作文件
← 返回 Python Academy