2012-01-02 89 views
1

使用ConfigParser模块我试图读取配置文件,以便我可以安全地允许用户编辑应用程序的设置并在脚本之间共享这些配置。 这对于主要脚本来说是完美的。但是,有一个被调用的辅助脚本,它会在同一位置读取相同的配置文件,但会返回找不到该位置的错误。 这两个脚本都位于同一目录中,application/bin/ 配置文件位于application/conf/要在主脚本中成功引用配置文件,请使用以下完美工作的代码。Python - 脚本执行,定位错误

config = ConfigParser.ConfigParser() 
config.readfp(open('../conf/settings.conf')) 

当辅助脚本使用相同的代码执行时,它报告该位置不存在?我使用记录器模块并将其记录到sys.path [0],该文件正确地返回了与主脚本相同的bin文件夹。有没有可能简单的我在这里失踪?

此外,任何针对这些问题的疑难解答提示都值得欢迎。

+1

关于文件权限是什么? – DonCallisto 2012-01-02 15:41:48

+0

你如何运行脚本?如果您从终端启动它们,您是否从同一个工作目录运行它们? – James 2012-01-02 15:43:59

+0

对这些文件的权限是相同的,并且此时执行它们的应用程序将作为根进行调用,因为这是当前的内部测试。 @James,他们都被Python解释器的同一个实例调用。据我所见,这两个脚本之间的位置和配置文件的相对位置应该没有区别。 – Draineh 2012-01-02 16:22:57

回答

1

你可以喜欢使用dirname__file__

from os.path import dirname, join 
config = ConfigParser.ConfigParser() 
config_fn = join(dirname(__file__), '..', 'conf', 'settings.conf') 
config.read(config_fn) 

取决于你如何启动应用程序(蟒蛇斌/ app.py或Python app.py)时, '..' 会不正确。从.py文件的目录开始,您将始终可以使用该方法构建从.py到.conf的路径。

+0

谢谢。这工作完美,惊讶我最初搜索时没有遇到这个解决方案。我已经将相同的解决方案应用于已经正在工作的脚本以及一致性,并且所有脚本仍在工作。再次感谢 – Draineh 2012-01-02 16:23:51