如何基于脚本执行的相对路径加载配置文件?

3

StackOverflow,

以下是我的脚本的前几行:

from ConfigParser import SafeConfigParser
from docopt import docopt
import core as scrappy

ARGS = docopt(__doc__, version=scrappy.__version__)
if not ARGS['PATH']:
    ARGS['PATH'] = './'

# load config file
CFG = SafeConfigParser()
if not CFG.read(ARGS['--cfg']):  # call to CFG.read also loads file if it exists
    raise IOError('Configuration file not found.')

我试图读取的配置文件与上述脚本在同一目录中。默认情况下,docopt将此文件的路径设置为./file.conf(我已经使用file.conf进行了测试,并获得了相同的结果)。
脚本的最后一行总是被调用,这表明无法找到该文件。通过打印os.getcwd的输出,我确认了这一点,该输出显示脚本的执行目录是终端指向的任何目录。
怎么回事?
我该如何指向配置文件?
1个回答

5

使用预定义的模块属性__file__。像这样:

module_dir = os.path.dirname(__file__)
CFG = SafeConfigParser()
cfg_full_path = os.path.join(module_dir, ARGS['--cfg'])
if not CFG.read(cfg_full_path): 
    ...

为什么我应该优先选择这种方法而不是使用 sys.argv?有什么优势吗? - Louis Thibault
他们在这里说它并不总是有效。 - kerim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接