我有如下所示(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
根本不被执行。
我很困惑。我做错了什么,我该怎么做呢?
你尝试'subprocess.Popen(r'start d:\ DIR_1 \ batch_1.bat',shell = True,cwd = r'd:\ dir_1')'? – falsetru
使用'&&'应该可以工作:'Popen('cd D:/ dir_1/&& start batch_1.bat',shell = True)' – Stack