0

我有一个连接到我的服务器的网络应用程序和一个移动应用程序。在我的服务器中,我有一个模块 (md.py),它使用另一个模块 (config.py) 从本地 XML 文件中读取数据。

当我向 config.py(间接)发送请求以获取来自我的应用程序的数据时,一切正常。当我从位于同一台机器上的 md.py 调用 config.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')

我能做些什么来解决这个问题?

4

1 回答 1

2

首先导入dirnamejoinos.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

于 2014-05-11T00:17:11.433 回答