2012-01-02 111 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