Python 在不同目录中执行批处理文件
我的文件结构如下(Windows): 对于这个问题,Python 在不同目录中执行批处理文件,python,python-2.7,Python,Python 2.7,我的文件结构如下(Windows): 对于这个问题,batch_1.bat只调用batch_2.bat,如下所示: cd dir_1a start batch_2.bat %* 从命令提示符下打开batch_1.bat确实会按预期打开batch_2.bat,从那以后,一切都是金色的 现在,我希望我的Python文件D:\dir\u 2\main.py生成一个新进程,该进程启动batch\u 1.bat,然后该进程应启动batch\u 2.bat。因此,我认为以下Python代码应该可以工作:
batch_1.bat
只调用batch_2.bat
,如下所示:
cd dir_1a
start batch_2.bat %*
从命令提示符下打开batch_1.bat
确实会按预期打开batch_2.bat
,从那以后,一切都是金色的
现在,我希望我的Python文件D:\dir\u 2\main.py
生成一个新进程,该进程启动batch\u 1.bat
,然后该进程应启动batch\u 2.bat
。因此,我认为以下Python代码应该可以工作:
import subprocess
subprocess.Popen(['cd "D:/dir_1"', "start batch_1.bat"], shell=True)
这导致“系统找不到指定的路径”被打印到我的Python控制台。(当然,不会出现错误。)这是由于第一个命令。即使我将其缩减为:
subprocess.Popen(['cd "D:/"'], shell=True)
我还尝试直接启动批处理文件,如下所示:
subprocess.Popen("start D:/dir_1/batch_1.bat", shell=True)
出于我无法完全理解的原因,这似乎只是在dir_2
中打开了一个windows命令提示符
如果我放弃这个命令的start
部分,那么我的Python进程将最终等待batch_1
完成,这是我不想要的。但它确实更进一步:
subprocess.Popen("D:/dir_1/batch_1.bat", shell=True)
这将导致批处理1.bat成功执行。。。在dir_2
中,Python脚本的目录,而不是batch_1.bat
的目录,这导致它无法找到dir_1a\
,因此根本不执行batch_2.bat
我感到非常困惑。我做错了什么,我应该做什么呢?这里回答了你的问题: 简而言之,只需将可选的cwd参数传递给
Popen
:
subprocess.Popen(["batch_1.bat"], shell=True, cwd=r'd:\<your path>\dir1')
subprocess.Popen([“batch_1.bat”],shell=True,cwd=r'd:\\dir1')
您是否尝试过subprocess.Popen(r'start D:\dir\u 1\batch\u 1.bat',shell=True,cwd=r'D:\dir\u 1')
?使用&
应该有效:Popen(
subprocess.Popen(["batch_1.bat"], shell=True, cwd=r'd:\<your path>\dir1')