@Dima_kras

Как изменить содержимое /etc/dhcpcd.conf с помощью Python?

Добрый день, в файле /etc/dhcpcd.conf статично задан ip адрес Raspberry, например:

interface eth0
 
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1


Хочу программно - в скрипте Python заменить ip, чтобы получилось:

interface eth0
 
static ip_address=192.168.0.18
static routers=192.168.0.1
static domain_name_servers=192.168.0.1


Как это сделать? Просто обратится как к текстовому файлу, прочитать, заменить и записать обратно? И соответсвенно перезагрузить чтобы изменение вступили в силу.
  • Вопрос задан
  • 319 просмотров
Решения вопроса 1
@Drill
Да.
Просто обратится как к текстовому файлу, прочитать, заменить и записать обратно
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@margadon
Программист встраиваемых систем. Тимлид
например так:
def file_edit(fname, field, new_value):
    """ edit conf file <field> value to new one """
    if type(fname)     != str | \
       type(field)     != str | \
       type(new_value) != str :
        return False
    """ to do - validate the field mask """
    with open(fname, 'r') as f:
        file = f.read()
    strs = file.split('\n')
    for i, _str in enumerate(strs):
        if field & not "#" in _str:  #don't edit comments
            strs[i] = field + new_value
    out = ''
    for _str in strs:
        out+=_str+'\n'
    with open(fname, 'w') as f:
        f.write(out)
    return True

Отличие этого кода от всяких конфиг парсеров - он полностью сохраняет комментарии в исходном файле.
Всю малинку после редактирования перезагружать не нужно, достаточно перезагрузить dhcpcd.service
sudo ip addr flush dev eth0 && sudo systemctl restart dhcpcd.service
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы