После обновления до Python 3.4 все интерактивные команды регистрируются в ~/.python_history
. Я не хочу, чтобы Python создавал или записывал в этот файл.
Создание символической ссылки на /dev/null
не работает, Python удаляет файл и создает его заново. Документация предлагает удалить sys.__interactivehook__
, но это также удаляет табуляции завершения. Что нужно сделать, чтобы отключить запись этого файла истории, но при этом сохранить завершение табуляции?
Дополнительные детали:
- Распространение: Arch Linux x86_64
- readline 6.3-3
- питон 3.4.0-2
python
interactive
Lekensteyn
источник
источник
chattr
. Я ищу один (пользовательский) файл конфигурации или переменную среды.chmod
это решение, предложенное разработчиками python в этом отчете об ошибках несколько недель назад, хотя там также есть упоминание~/.inputrc
(нетman readline
, кстати, кроме функции библиотеки).inputrc
иchmod
у меня тоже не работает, файл все равно модифицируется (Arch Linux). Существуетinfo inputrc
страница, но я, как правило, не очень доволен чтением информационных страниц, так как по ним сложно ориентироваться.Ответы:
Начиная с Python 3.6, вы можете использовать readline.set_auto_history, чтобы отключить это:
источник
Это работает для меня.
Создание
~/.pythonrc
файла:Затем экспортируйте это:
источник
set_history_length
что-то волшебное? Завершение табуляции выполняется для функций, а не для истории.~/.python_history
быть написанным (проверено сPYTHONSTARTUP=$HOME/.pythonrc strace -e file,write -o /tmp/st python
). Я начинаю думать, что нет способа отключить это, но продолжаю табуляцию без дублирования кода/usr/lib/python3.4/site.py
.Другое решение ~ / .pythonrc:
источник
Чтобы запретить Python писать
~/.python_history
, отключите хук, который активирует эту функцию:Если вы хотите включить завершение табуляции и отключить функцию истории, вы можете адаптировать
site.enablerlcompleter
код. Напишите следующий код~/.pythonrc
и установите егоexport PYTHONSTARTUP=~/.pythonrc
в своей оболочке, чтобы включить его.источник
Пока это не исправлено каким-либо образом в самом Python, вы можете делать это в системах UNIX:
После этого вы будете получать
каждый раз, когда вы завершаете работу оболочки Python. Статус выхода все равно будет
0
.Обратите внимание, что если вы оставите его как файл, вам нужно создать и сделать неизменным другой файл,
~/.python_history
источник
Поместите следующее в файл и установите
PYTHONSTARTUP
его (или вызовите файлsitecustomize.py
и сделайте его доступным изPYTHONPATH
)Таким образом, вы по-прежнему будете иметь доступ к завершению табуляции и предыдущей истории, но введенные вами команды не будут добавлены в файл истории.
источник
PYTHONSTARTUP
скрипт действительно выполняется.Вот мой метод (который оказался в основном более надежной и питонной версией метода Бердарио). Он только запрещает запись в него
.python_history
, но не считывает его, если он существует, или добавляет новые строки в историю текущего экземпляра. Я рекомендую сохранить его какsite-packages/sitecustomize.py
, потому чтоsite
это модуль, который пишет.python_history
и импортирует,sitecustomize
если он существует , хотя и называет его чем-то другим и указывает на негоPYTHONSTARTUP
тоже.Обновление: что я сделал для 3.7, специфично для моей системы, а не для pep8:
источник
Мое текущее решение (для достаточно недавних версий Python 3) предотвращает использование по умолчанию ~ / .python_history, но оставляет возможность явной записи истории в заданный файл (используя readline.write_history_file (имя файла) или readline.append_history_file (... )) в файле PYTHONSTARTUP должно быть следующее:
У него есть приятный (для меня) побочный эффект, помечающий любую явно написанную историю временем запуска интерпретатора. Это работает из-за исправления ошибки 5845, которое можно увидеть здесь .
источник