4

設定ファイルの読み込みと読み取りに問題があります。ファイルを実行するとimptest.py、Pythonが読み取らconfigfile.cfgれ、次の出力が得られます。

D:\tmp\test\dir1>python imptest.py
Section1
Section2
Section3

しかし、mainfile.pyファイルを実行しても何も起こらず、Pythonはconfigfile.cfgファイルを読み取らないようです。

D:\tmp\test>python mainfile.py

D:\tmp\test>

私のディレクトリの構造:

テスト/
 dir1 /
    __init__。py
    imptest.py
 静的/
    configfile.cfg
 mainfile.py

mainfile.pyファイルのソース:

from dir1.imptest import run

if __name__ == '__main__':
    run() 

imptest.pyファイルのソース:

import configparser

def run():
    config = configparser.ConfigParser()
    config.read('../static/configfile.cfg', encoding='utf8')

    for sections in config.sections():
        print (sections)

if __name__ == '__main__':
    run()

configfile.cfgファイルのソース:

[Section1]
Foo = bar
Port = 8081

[Section2]
Bar = foo
Port = 8080

[Section3]
Test = 123
Port = 80 

編集済み

これまでのところ、私の解決策(絶対パス)は次のとおりです。

cwd = os.path.realpath(os.path.dirname(__file__) + os.path.sep + '..')
config.read(os.path.join(cwd,'static' + os.path.sep + 'configfile.cfg'), encoding='utf8')

@Yavarによる解決策と同じですか、それとも良いですか、悪いですか、それとも同じですか?

4

2 に答える 2

3

への相対パスが必要な場合は、次imptest.pyを使用します__file__

mydir = os.path.dirname(os.path.abspath(__file__))
new_path = os.path.join(mydir, '..', rest_of_the_path)

また、この質問に対する回答も参照してください: __file__ と sys.argv[0] の違い

于 2012-10-11T19:01:35.897 に答える
1

メインファイル バージョンから呼び出されたときに正しいパスを使用していないため、構成ファイルが見つかりません。

興味深いことに、configparser は黙って無視します。これをチェックしてください:

Python 3.2.3 (default, Sep 10 2012, 18:14:40) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import configparser
>>> 
>>> config = configparser.ConfigParser()
>>> config.read('doesnotexist.cfg')
[]
>>> print(config.sections())
[]
>>> 
于 2012-10-11T19:03:21.323 に答える