IOError: [Errno 2] Иногда такой файл или каталог не создаются
У меня есть веб-приложение и мобильное приложение, которое подключается к моему серверу. На моем сервере у меня есть модуль (md.py), который использует другой модуль (config.py), который читает данные из локального файла XML.
Когда я отправляю запрос в config.py (косвенно) для данных из моих приложений, все работает нормально. Проблема возникает, когда я вызываю config.py из md.py, которые находятся на одном компьютере.
Это иерархия:
root/
start.py
md/
__init__.py
md.py
server/
__init__.py
config.py
server.py
data/
config.xml
Это md.py
from server import config
class Md:
def get_data(self):
conf = config.Config() # Errno 2 here
Это config.py
import xml.etree.ElementTree as ET
CONF_FILE = "data/config.xml"
class Config:
def __init__(self):
self.file = ET.parse(CONF_FILE)
self.root = self.file.getroot()
И вот как я запускаю эти файлы в start.py
def start():
global server_p
server_p = subprocess.Popen('python ./server/server.py')
md = subprocess.Popen('python ./md/md.py')
Что я могу сделать, чтобы это исправить?
1 ответ
Первый импорт dirname
а также join
от os.path
модуль в config.py
:
from os.path import dirname, join
Тогда поменяй CONF_FILE
чтобы:
CONF_FILE = join(dirname(__file__), 'data', 'config.xml')
Думать о __file__
как абсолютный путь к файлу, в котором определен некоторый код, в момент его загрузки в качестве модуля. dirname
берет этот путь и дает вам путь к каталогу, в котором находится файл, и join
объединяет любое количество аргументов в новый путь.
Итак, сначала мы получили бы {abs_path_to}root/server/config.py
чтением __file__
, затем dirname(__file__)
заставляет нас {abs_path_to}root/server
, Присоединиться к этому с data
а потом config.xml
наконец-то дает нам {abs_path_to}root/server/data/config.xml
,