0

サーバーに接続する Web アプリとモバイル アプリがあります。私のサーバーには、ローカル XML ファイルからデータを読み取る別のモジュール (config.py) を使用するモジュール (md.py) があります。

アプリからのデータのリクエストを 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

最初にインポートdirnamejoin、 の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ます。

于 2014-05-11T00:17:11.433 に答える