如何用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
相关产品推荐
相关产品推荐

