我有一个web应用程序和一个移动应用程序连接到我的服务器。在我的服务器中,我有一个模块(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')
我能做些什么来解决这个问题?
首先从config.py
中的os.path
模块导入dirname
和join
:
from os.path import dirname, join
然后将CONF_FILE
更改为:
CONF_FILE = join(dirname(__file__), 'data', 'config.xml')
可以把__file__
看作是某些代码在其中定义的文件的绝对路径,当它作为模块加载时。dirname
接受该路径,并给出文件所在目录的路径,join
将任意数量的参数串成一个新路径。
所以首先我们通过读取__file__
得到{abs_path_to}root/server/config.py
。然后dirname(__file__)
得到{abs_path_to}root/server
。再加上data
和config.xml
,最后我们得到了{abs_path_to}root/server/data/config.xml
。