2013-07-26 3 views
0

У меня есть сценарий python «cost_and_lead_time.py» в C: \ Desktop \ A. Этот скрипт импортирует 3 других скрипта и файл «cost_model.json», все из которых находятся в папке A.bat файл работает с скриптом py в другом каталоге

Теперь у меня есть результат моделирования, например C: \ Desktop \ Model \ Results. У меня есть однострочный пакетный файл в этой папке «call C: \ Desktop \ A \ cost_and_lead_time.py», но он возвращает ошибку, когда пытается открыть файл cost_model.json. Кажется, что у него нет проблемы с импортом 3 других скриптов, которые появляются перед открытием json.

Мой вопрос: есть ли способ сохранить этот файл cost_model.json в этом каталоге и запустить скрипт через пакетный файл без копирования/вставки json-файла в папку результатов? Единственный способ, о котором я могу думать, - это жестко закодировать полный путь к файлу в скрипте python, но это не идеально для меня. Я ищу код для добавления в командный файл, а не скрипт python.

Благодаря

+0

Как вы открываете файл cost_model.json? Предполагается ли он, что он находится в текущем рабочем каталоге - если это так, исправьте это. – martineau

+0

показать нам ваш .BAT код, пожалуйста. В частности, я хотел бы посмотреть, как он задает имя json-файла для скрипта python для его загрузки. –

ответ

0

В конечном счете там должен быть какой-то способ, чтобы сказать, что ваш сценарий вы нуждающихся в обработке. Для этого существует множество способов, но это действительно должно произойти. Я думаю, что наиболее очевидной задачей в пакетном файле является копирование целевого файла на место перед запуском скрипта Python.

Однако более чистым решением может быть аргумент командной строки в скрипт python (через sys.argv), который сообщает скрипту, какой файл ему нужно обрабатывать.

1

'cd path' в файле bat или добавить этот код в исполняемый файл 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.path.abspath при разборе аргументы перед os.chdir. Или не использовать chdir и переписать статические пути