Я пользуюсь библиотекой ConfigObj Python для этого. Если Вы делаете это, это действительно требует записи Python для взаимодействия через интерфейс с файлами конфигурации. У меня обычно есть a default_conf
файл, который имеет значения по умолчанию, и я могу выборочно переопределить эти настройки с некоторым другим файлом, сказать user_conf
Вот код, который я в настоящее время использую как пример. Вторая половина функции является проверкой, которая важна, но можно проигнорировать ее в первом приближении. Для использования Вы делаете
conf = get_conf()
ip = conf["ip"]
В Вашем случае я предполагаю, что файл сервера является тем, который переопределяет, хотя чаще это - пользовательский файл, который переопределяет системный файл. Это - конечно, пользовательская конвенция в Системах типов Unix.
Для записи ConfigObj возражают для регистрации, в первом приближении Вы делаете (если config
Ваш объект как в сценарии ниже),
config.filename = filename
config.write()
Таким образом, Вы могли изменить функцию ниже для записи в файл вместо того, чтобы возвратить объект конфигурации, если Вы хотите. Посмотрите Запись Файла конфигурации для немного большего количества детали.
def get_conf():
import configobj, validate, sys
try:
config = configobj.ConfigObj('default_conf', configspec='conf.validate', raise_errors=True)
except configobj.ConfigObjError:
print "ERROR FOR CONFIG FILE 'default_conf':"
raise
try:
user = configobj.ConfigObj('user_conf', configspec='conf.validate', raise_errors=True)
except configobj.ConfigObjError:
print "ERROR FOR CONFIG FILE 'user_conf':"
raise
config.merge(user)
#This is config file validation
fdict = {'check_list_of_list_of_integers': list_of_list_of_integers}
validator = validate.Validator(fdict)
results = config.validate(validator, preserve_errors=True)
if results != True:
for entry in configobj.flatten_errors(config, results):
# each entry is a tuple
section_list, key, error = entry
if key is not None:
section_list.append(key)
else:
section_list.append('[missing section]')
section_string = ', '.join(section_list)
if error == False:
error = 'Missing value or section.'
print section_string, ' = ', error
sys.exit(1)
return config
ОБНОВЛЕНИЕ 16-го декабря 2015: Что-то как YAML - вероятно, лучшее общее решение. Я рекомендую это вместо ConfigObj. С одной стороны, это более гибко.
Необходимо смочь войти в систему как корень, потому что обычно процент размера раздела резервируется, чтобы всегда включать корневой вход в систему для спасательных операций и такого. Посмотрите это Вопросы и ответы U&L:
Зарезервированное пространство для корня в файловой системе - почему?
То, что Вы не сможете сделать, однако, входят в систему, поскольку обычный пользователь от Вашего менеджера по оформлению затем переключается на корень или использование sudo
от оболочки в терминале. У Вас есть две альтернативы вместо этого:
Это предполагает, что причина, Ваш раздел был заполнен, происходит из-за действия обычного пользователя и не действия корневыми процессами. В таких случаях Вы, возможно, должны были бы обратиться к монтированию раздела в Живой системе и освобождении пространство оттуда. Благодаря комментарию Alexios для перевода в рабочее состояние этого.
root
или демон, работающий как суперпользователь, который заполнил файловую систему во-первых. В этом случае однопользовательская начальная загрузка (или при экстремальных обстоятельствах, спасательной начальной загрузке) может быть необходимой. – Alexios 23.12.2013, 15:44