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

如何用Python的Subprocess在Windows单Shell中依次执行CMD命令?

没问题!完全可以做到,而且不用手动操作CMD窗口。作为subprocess的新手,你需要了解Windows shell的一些小特性,我给你两种简单可靠的实现方案:

方案1:用CMD命令串一次性执行所有步骤

Windows的CMD支持用&&来串联命令——只有前一个命令执行成功,才会继续执行下一个。我们可以把cd、激活虚拟环境、运行脚本这三个步骤串成一条命令,让subprocess在同一个shell进程里执行:

import subprocess

# 用&&串联三个命令,注意Windows路径的转义(用双反斜杠)
cmd_sequence = 'cd C:\\Users\\User\\myvirtualenvs\\project1 && Scripts\\activate.bat && python Hello.py'
subprocess.run(cmd_sequence, shell=True, check=True)

几个关键参数的说明:

  • shell=True:告诉subprocess调用系统默认的shell(也就是cmd.exe)来解析这条命令串,这样才能识别&&和cd命令
  • check=True:如果任何一步命令执行失败(返回非0状态码),会直接抛出CalledProcessError,方便你快速定位问题
  • &&:比&更安全,&会不管前一步成功与否都执行下一个命令,而&&只会在前一步成功时继续

方案2:指定工作目录简化命令

其实我们可以不用手动写cd命令,直接通过subprocess的cwd参数指定工作目录,这样subprocess会自动在目标目录下执行后续命令,代码更简洁:

import subprocess

# 用原始字符串r''避免路径转义的麻烦
venv_work_dir = r'C:\Users\User\myvirtualenvs\project1'
# 直接在指定目录下激活虚拟环境并运行脚本
run_cmd = r'Scripts\activate.bat && python Hello.py'

subprocess.run(run_cmd, shell=True, cwd=venv_work_dir, check=True)

这个方案的优势:

  • 不用手动处理cd命令,路径管理更清晰
  • 用原始字符串r''处理Windows路径,避免了双反斜杠的繁琐

额外小提示

  • 确保Hello.py确实在project1目录下,如果不在,你可以写它的绝对路径,比如python C:\path\to\Hello.py
  • 如果想看到虚拟环境激活后的输出(比如控制台出现(project1)提示符),可以保留默认的输出设置,让内容直接打印到你的Python控制台
  • 不管是virtualenv还是Python自带的venv创建的虚拟环境,激活脚本的路径都是Scripts\activate.bat,所以这两个方案通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:28:53