2014-05-10 40 views
0

我有一个web应用程序和连接到我的服务器的移动应用程序。在我的服务器中,我有一个模块(md.py),它使用另一个模块(config.py)从本地XML文件读取数据。IOError:[Errno 2]偶尔没有这样的文件或目录

当我发送一个请求到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') 

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

+0

尝试使config.py文件运行ls命令,我认为工作目录可能不是它实际位于的目录。 – Natecat

+0

有没有一种方法可以动态获取正确的路径? –

回答

2

首次进口dirnamejoinos.path模块config.py

from os.path import dirname, join 

然后换CONF_FILE到:的__file__为一些代码中定义的文件的绝对路径

CONF_FILE = join(dirname(__file__), 'data', 'config.xml') 

思考,当时它被作为一个模块加载。 dirname将采用该路径并为您提供文件所在目录的路径,并且join将任意数量的参数串入新路径中。

所以首先我们通过阅读__file__得到{abs_path_to}root/server/config.py。然后dirname(__file__)让我们到{abs_path_to}root/server。加入data,然后​​3210终于给我们{abs_path_to}root/server/data/config.xml

+0

我试图做这样的事情,并没有成功,缺少'dirname(__ file __)'。谢谢您的帮助。 –

相关问题