我有一个类似以下的文件结构(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
根本没有执行。
我非常困惑。我做错了什么,我应该做些什么呢?
答案 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" ...}]