2017-06-29 78 views
0

我有如下所示(Windows)中AA文件结构:执行批处理文件在不同的目录

D:\ 
    dir_1\ 
     batch_1.bat 
     dir_1a\ 
      batch_2.bat 
    dir_2\ 
     main.py 

对于这个问题的缘故,batch_1.bat简单的调用batch_2.bat,看起来像:

cd dir_1a 
start batch_2.bat %* 

从命令提示符处打开batch_1.bat确实会打开batch_2.bat,因为它应该是这样,并且从那里开始,所有内容都是金色的。

现在我想我的Python文件,D:\dir_2\main.py,以产生新的进程,其开始batch_1.bat,这反过来应该开始batch_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) 

至于原因,我没有完全搞定,这似乎只是打开一个Windows命令提示符,dir_2

如果我放弃此命令的start部分,那么我的Python进程将最终等待batch_1完成,这是我不想要的。但它确实得到远一点:

subprocess.Popen("D:/dir_1/batch_1.bat", shell=True) 

这导致batch_1.bat成功执行......在dir_2的Python脚本的目录,而不是batch_1.bat目录,这将导致它未能找到dir_1a\,因此batch_2.bat根本不被执行。

我很困惑。我做错了什么,我该怎么做呢?

+0

你尝试'subprocess.Popen(r'start d:\ DIR_1 \ batch_1.bat',shell = True,cwd = r'd:\ dir_1')'? – falsetru

+0

使用'&&'应该可以工作:'Popen('cd D:/ dir_1/&& start batch_1.bat',shell = True)' – Stack

回答