2010-05-20 4 views
0

J'ai un fichier de configuration FOO dans/etc/sysconfig /. Ce fichier Linux est très similaire à INI-File, mais sans déclaration de section.Comment extraire la valeur de etc/sysconfig en Python

Afin de récupérer une valeur de ce fichier, je l'habitude d'écrire un script shell comme:

source /etc/sysconfig/FOO 
echo $MY_VALUE 

Maintenant, je veux faire la même chose en python. J'ai essayé d'utiliser ConfigParser, mais ConfigParser n'accepte pas un tel format de fichier INI, sauf s'il a une déclaration de section.

Existe-t-il un moyen de récupérer la valeur d'un tel fichier?

Répondre

1

Je suppose que vous pourriez faire exactement ce que vous faites avec votre script shell en utilisant le module subprocess et en lisant la sortie. Utilisez-le avec l'option shell définie sur True.

+0

J'ai finalement utilisé commands.getstatusoutput ("source/etc/sysconfig/FOO; echo $ BAR") pour obtenir des valeurs – stanleyxu2005

1

Si vous souhaitez utiliser ConfigParser, vous pouvez faire quelque chose comme:

#! /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") 

Le code crée un objet type fichier en mémoire contenant un en-tête de section [principale] et le contenu du fichier spécifié. ConfigParser lit ensuite cet objet filelike.

+0

ConfigParser a quelques problèmes. (1) Toutes les clés seront converties en minuscules. (2) Le "" autour d'une valeur de chaîne ne sera pas supprimé. Donc, finalement, j'utilise une autre solution. – stanleyxu2005

+0

Jetez un oeil à la bibliothèque ConfigObj. Peut-être qu'il gère les problèmes que vous mentionnez. http://www.voidspace.org.uk/python/configobj.html – codeape

Questions connexes