Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不同目录中执行批处理文件_Python_Python 2.7 - Fatal编程技术网

Python 在不同目录中执行批处理文件

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代码应该可以工作:

我的文件结构如下(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代码应该可以工作:

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')