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,

Другие вопросы по тегам