Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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 在不同目录中运行py脚本的bat文件_Python_Batch File - Fatal编程技术网

Python 在不同目录中运行py脚本的bat文件

Python 在不同目录中运行py脚本的bat文件,python,batch-file,Python,Batch File,我在C:\Desktop\a中有一个python脚本“cost\u and\u lead\u time.py”。该脚本导入3个其他脚本和一个“cost\u model.json”文件,所有这些都在文件夹a中 现在,我在C:\Desktop\Model\Results中有一个模拟结果。我在这个文件夹中有一个单行批处理文件“call C:\Desktop\a\cost\u and\u lead\u time.py”,但它在尝试打开cost\u model.json文件时返回一个错误。在导入其他3个脚

我在C:\Desktop\a中有一个python脚本“cost\u and\u lead\u time.py”。该脚本导入3个其他脚本和一个“cost\u model.json”文件,所有这些都在文件夹a中

现在,我在C:\Desktop\Model\Results中有一个模拟结果。我在这个文件夹中有一个单行批处理文件“call C:\Desktop\a\cost\u and\u lead\u time.py”,但它在尝试打开cost\u model.json文件时返回一个错误。在导入其他3个脚本时,与打开json之前的脚本一样,似乎没有问题

我的问题是,有没有办法将这个cost_model.json文件保存在该目录中,并在批处理文件中运行脚本,而不将json文件复制/粘贴到results文件夹中?我能想到的唯一方法是在python脚本中硬编码文件的完整路径,但这对我来说并不理想。我正在寻找添加到批处理文件的代码,而不是python脚本


谢谢

最终需要有某种方法来告诉您的脚本您需要处理什么。有很多种方法可以做到这一点,但它确实需要实现。我认为在批处理文件中要做的最明显的事情是在运行Python脚本之前将目标文件复制到位


然而,一个更简洁的解决方案可能是在python脚本中引入一个命令行参数(通过sys.argv),该参数告诉脚本需要处理哪个文件。

bat文件中的“cd path”,或者将此代码添加到python执行的文件中

import os,sys
path = os.path.abspath(os.path.dirname(__file__))
os.chdir(path) #for relative files
sys.path.insert(0,path) #for modules load

解析os.chdir之前的参数时,必须使用os.path.abspath将传递给脚本的工作文件路径重写为。或者不使用chdir并重写静态路径

如何打开cost_model.json文件?它是否假定它在当前工作目录中?如果是,请修复它。请显示您的.BAT代码。我特别想看看它是如何为python脚本指定json文件的名称来加载它的。