在不同目录

时间:2017-06-29 09:31:56

标签: python python-2.7

我有一个类似以下的文件结构(Windows):

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)

由于我不完全理解的原因,这似乎只是在dir_2 中打开一个Windows命令提示符

如果我放弃此命令的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根本没有执行。

我非常困惑。我做错了什么,我应该做些什么呢?

1 个答案:

答案 0 :(得分:2)

您的问题在这里得到解答:Python specify popen working directory via argument

简而言之,只需将可选的cwd参数传递给Array = [{key_id: 7, key1: "String1", key1: "String2" ...}]

Array = [{key_id: 7, key1: "String1", "String2" ...}]