Каков официальный способ сохранить настройки для программ Python?

Прежде всего, вы должны проверить, способен ли ваш терминал отображать текст курсивом. В вашем типе терминала (флаг -e гарантирует, что коды перехода интерпретируются)

echo -e "\e[3m foo \e[23m"

Если вы видите foo , тогда все в порядке, в противном случае вам нужно изменить терминал (Gnome Terminal и Консоль - хороший выбор).

Затем вы должны помочь Vim распознать тип используемого вами терминала, вставить в вас ~/.bashrc:

export TERM="xterm-256color"

Теперь вы можете попробовать и посмотреть, достаточно ли этого, открыть новый файл vim foo.html со следующим содержанием

<i>foo</i>

Вы видите foo курсивом? Если нет, то вам нужно пойти немного дальше, сейчас Vim не знает кодов выхода для переключения в режим курсива, вам нужно сказать об этом (это самая сложная часть, мне понадобилось несколько лет, чтобы понять это) .

Вставьте следующие две строки в свои ~/.vimrc

set t_ZH=^[[3m
set t_ZR=^[[23m

Это те же escape-коды, которые мы использовали ранее в терминале, имейте в виду, что ^[ не являются буквальными символами, но представляют escape-символ Вы можете вставить его в режиме вставки с помощью CTRL - V , за которым следует ESC (см. :help i_CTRL-V)

Теперь снова откройте файл, который мы создали до foo.html, и вы должны увидеть foo курсивом; если ты этого не сделаешь, я больше не смогу тебе помочь. В противном случае вы почти закончили; есть один последний шаг.

Вставьте в свой файл ~/.vimrc файл

highlight Comment cterm=italic

после загрузки любой схемы цветов.

51
задан Steven Hepting 8 June 2009 в 05:13
поделиться

8 ответов

Зависит от преобладающей целевой аудитории.

Если это программисты все равно изменяют файл, просто используйте файлы Python, например settings.py

Если это конечные пользователи, подумайте о файлах ini.

32
ответ дан 7 November 2019 в 09:56
поделиться

Не знаю, можно ли это считать "официальным", но он есть в стандартной библиотеке: 14.2. ConfigParser - Парсер файла конфигурации .

Это, очевидно, не универсальное решение. Просто используйте то, что кажется наиболее подходящим для задачи, без какой-либо необходимой сложности (и особенно - полноты по Тьюрингу! Подумайте об автоматических конфигураторах или конфигураторах с графическим интерфейсом пользователя).

15
ответ дан 7 November 2019 в 09:56
поделиться

Как многие говорили, "официального" пути не существует. Однако есть много вариантов. В этом году на PyCon был доклад о многих доступных вариантах.

31
ответ дан 7 November 2019 в 09:56
поделиться

Еще один вариант, PyQt. Qt имеет платформенно-независимый способ хранения настроек с помощью класса QSettings. Под капотом, в Windows он использует реестр, а в Linux он сохраняет настройки в скрытом файле conf. QSettings работает очень хорошо и довольно невзрачно.

9
ответ дан 7 November 2019 в 09:56
поделиться

Это во многом зависит от сложности вашей конфигурации. Если вы выполняете простое сопоставление значений ключа и хотите иметь возможность редактировать настройки с помощью текстового редактора, я думаю, что ConfigParser - это то, что вам нужно.

Если ваши настройки сложные и включают списки и вложенные структуры данных, я бы использовал XML или JSON и создал редактор конфигурации.

Для действительно сложных вещей, когда конечный пользователь не должен сильно менять настройки или ему больше доверяют, просто создайте набор классов Python и оцените скрипт Python, чтобы получить конфигурацию.

4
ответ дан 7 November 2019 в 09:56
поделиться

Я не уверен, что существует «официальный» способ (он не упоминается в Zen of Python: )) - Я сам обычно использую модуль Config Parser и думаю, что вы найдете это довольно распространенным явлением. Я предпочитаю это подходу с использованием файлов Python, потому что вы можете записывать в него ответ и динамически перезагружать, если хотите.

6
ответ дан 7 November 2019 в 09:56
поделиться

зачем Гвидо благословлять то, что выходит за рамки его возможностей? Нет ничего особенного благословенного.

0
ответ дан 7 November 2019 в 09:56
поделиться

Компилятор должен быть достаточно умен, чтобы распознавать, что BigFoo не может быть преобразовано в IEnumerable , но это не так. Он просто видит, что это IEnumerable , и чувствует, что это потенциальный кандидат на перегрузку (даже несмотря на то, что ограничение, которое вы определили, заставляет T быть IFoo и int нельзя преобразовать в IFoo ). Хотя это неудобно, но это не так уж и важно. Просто приведите bigFoo к IFoo , и компилятор будет доволен:

fooContainer.Add((IFoo)bigFoo);

В качестве альтернативы, вы можете сделать вашу общую перегрузку Add uglier:

public void Add<T, U>(U group)
    where T : IFoo
    where U : IEnumerable<T>
{
}

В любом случае у вас будет больше ввода, второе решение устранит необходимость для отправки вызовов на Добавить ,

0
ответ дан 7 November 2019 в 09:56
поделиться
Другие вопросы по тегам:

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