You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中分行执行CMD的多条命令?

如何在Python中拆分CMD多条命令到不同行执行

问题根源

你之前的尝试失败主要有两个原因:

  1. 多次调用os.system(cmd /k):每个调用都会启动独立的CMD进程,/k参数会让执行后停留在该窗口,后续代码会被阻塞,直到你关闭窗口才会继续,所以看起来只执行了第一条。就算换成/c,每个命令也会在独立进程中运行,环境变量等状态无法共享。
  2. 多行字符串的问题:多行写法会引入换行符和额外空格,CMD无法正确解析换行后的&分隔符,导致仅执行第一条命令。

可行解决方案

方案1:用列表+字符串拼接(兼容os.system)

把命令按行存到列表中,用&拼接成完整的CMD命令串,既方便编辑又能保证CMD正确解析:

import os

# 每条命令单独一行,轻松增删修改
commands = [
    "dir /s",
    "echo Hello World",
    "pause",
    # 添加更多命令...
    "exit"
]

# 拼接成CMD可识别的命令串
full_cmd = 'cmd /c "' + ' & '.join(commands) + '"'
os.system(full_cmd)

如果需要执行后保留CMD窗口,把/c换成/k即可。

方案2:使用subprocess模块(官方推荐)

os.system已被官方标记为过时,subprocess模块功能更灵活强大,是Python执行外部命令的标准方式:

import subprocess

commands = [
    "set MY_VAR=Test",
    "echo %MY_VAR%",
    "dir",
    # 更多命令...
]

# 拼接命令串,确保在同一个CMD环境中执行
cmd_string = ' & '.join(commands)

# 执行命令,shell=True表示使用系统shell(Windows下为CMD)
# check=True会在命令执行失败时抛出异常,方便调试
subprocess.run(cmd_string, shell=True, check=True)

# 如果需要执行后保留窗口,修改为:
# subprocess.run(f'cmd /k "{cmd_string}"', shell=True)

进阶:捕获命令输出

如果需要获取命令的输出结果,可以添加参数捕获标准输出和错误:

result = subprocess.run(
    cmd_string,
    shell=True,
    check=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    encoding='utf-8'
)
print("命令输出:", result.stdout)

注意事项

  • 如果命令中包含双引号,需要用\"转义,比如:'"echo \"Hello with quotes\""'
  • 所有命令必须在同一个shell调用中执行,才能共享环境变量和工作目录;分开调用会启动独立进程,状态无法传递
  • 若命令来自不可信输入,避免使用shell=True防止注入风险,自用命令则无需担心

内容的提问来源于stack exchange,提问作者Farlitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:15:35