2010-05-20 28 views
0

我在/ etc/sysconfig /中有一個配置文件FOO。這個Linux文件與INI-File非常相似,但沒有節聲明。如何從Python中的etc/sysconfig檢索值

爲了獲取從這個文件中的值,我以前寫像一個shell腳本:

source /etc/sysconfig/FOO 
echo $MY_VALUE 

現在我想做同樣的事情在蟒蛇。我試圖使用ConfigParser,但ConfigParser不接受這種類似INI文件的格式,除非它有一個段聲明。

有沒有什麼辦法從這樣的文件檢索價值?

回答

1

我想你可以使用subprocess模塊和你的shell腳本完成你正在做的事情,並閱讀它的輸出。將它與shell選項一起使用,設置爲True

+0

我終於使用commands.getstatusoutput(「source/etc/sysconfig/FOO; echo $ BAR」)來獲取值 – stanleyxu2005 2010-05-21 18:51:12

1

如果你想使用ConfigParser,你可以這樣做:

#! /usr/bin/env python2.6 

from StringIO import StringIO 
import ConfigParser 

def read_configfile_without_sectiondeclaration(filename): 
    buffer = StringIO() 
    buffer.write("[main]\n") 
    buffer.write(open(filename).read()) 
    buffer.seek(0) 
    config = ConfigParser.ConfigParser() 
    config.readfp(buffer) 
    return config 

if __name__ == "__main__": 
    import sys 
    config = read_configfile_without_sectiondeclaration(sys.argv[1]) 
    print config.items("main") 

的代碼創建包含[主]節標題和指定文件的內容在內存中的文件對象。 ConfigParser然後讀取那個類似文件的對象。

+0

ConfigParser有一些問題。 (1)所有密鑰將被轉換爲小寫。 (2)字符串值周圍的「」不會被刪除。所以最後我用另一種解決方案。 – stanleyxu2005 2010-05-21 18:52:45

+0

查看ConfigObj庫。可能是它處理你提到的問題。 http://www.voidspace.org.uk/python/configobj.html – codeape 2010-05-26 07:49:34