Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to log the contents of a ConfigParser?

Tags:

How can I print the contents of a Python 2.7 ConfigParser to logging?

The only solution I can find is to write to a temporary file and read that file back in. Another idea I had was to get a fake "file handle" from the logging utility and pass that to the ConfigParser write method, but I don't know how to get such a handle form logging.

like image 580
Adam Avatar asked May 14 '14 18:05

Adam


People also ask

How do I print a Configparser object?

Just use a StringIO object and the configparser's write method. It looks like the only method for "printing" the contents of a config object is ConfigParser. write which takes a file-like object. io.

What is Configparser Configparser ()?

ConfigParser is a Python class which implements a basic configuration language for Python programs. It provides a structure similar to Microsoft Windows INI files. ConfigParser allows to write Python programs which can be customized by end users easily.

How do I use Configparser in Python 3?

Read and parse one configuration file, given as a file object. Read configuration from a given string. Read configuration from a dictionary. Keys are section names, values are dictionaries with keys and values that should be present in the section.


2 Answers

As this is the top Google search result and I was hoping to find a solution to print the values of the ConfigParser instance to stdout, here's a one-liner to help all future readers:

print({section: dict(config[section]) for section in config.sections()}) 
like image 120
Sean Pianka Avatar answered Sep 29 '22 20:09

Sean Pianka


You should be able to create a writable object that writes to the log. Something like this (if you want to keep the string around you could modify the ConfigLogger to save it as well):

import ConfigParser import logging  class ConfigLogger(object):     def __init__(self, log):         self.__log = log     def __call__(self, config):         self.__log.info("Config:")         config.write(self)     def write(self, data):         # stripping the data makes the output nicer and avoids empty lines         line = data.strip()         self.__log.info(line)  config = ConfigParser.ConfigParser() config.add_section("test") config.set("test", "a", 1) # create the logger and pass it to write logging.basicConfig(filename="test.log", level=logging.INFO) config_logger = ConfigLogger(logging) config_logger(config) 

This yields the following output:

INFO:root:Config: INFO:root:[test] INFO:root:a = 1 INFO:root: 
like image 35
agrinh Avatar answered Sep 29 '22 21:09

agrinh