Od czasu aktualizacji do Python 3.4 wszystkie interaktywne polecenia są logowane do ~/.python_history
. Nie chcę, aby Python tworzył lub zapisywał w tym pliku.
Utworzenie dowiązania symbolicznego do /dev/null
nie działa, Python usuwa plik i odtwarza go. Dokumentacja sugeruje, aby usunąć sys.__interactivehook__
, ale także usuwa kartę uzupełniania. Co należy zrobić, aby wyłączyć zapisywanie tego pliku historii, ale nadal zachować uzupełnianie tabulacji?
Dodatkowe Szczegóły:
- Distro: Arch Linux x86_64
- readline 6.3-3
- python 3.4.0-2
python
interactive
Lekensteyn
źródło
źródło
chattr
. Szukam pojedynczego pliku konfiguracyjnego (użytkownika) lub zmiennej środowiskowej.chmod
jest to rozwiązanie sugerowane przez deweloperów python w tym raporcie o błędach sprzed kilku tygodni, chociaż jest tam również wzmianka o~/.inputrc
nich (nie maman readline
BTW, z wyjątkiem funkcji biblioteki).inputrc
ichmod
dla mnie też nie działa, plik i tak zostaje zmodyfikowany (Arch Linux). Istniejeinfo inputrc
strona, ale ogólnie nie jestem zadowolony z czytania stron informacyjnych, ponieważ są one trudne w nawigacji.Odpowiedzi:
Począwszy od Pythona 3.6, możesz użyć readline.set_auto_history, aby wyłączyć to:
źródło
To działa dla mnie.
Tworzenie
~/.pythonrc
pliku:Następnie wyeksportuj to:
źródło
set_history_length
że coś magicznego? Uzupełnianie tabulatorów jest wykonywane dla funkcji, a nie dla historii.~/.python_history
że zostanie napisane (zweryfikowane za pomocąPYTHONSTARTUP=$HOME/.pythonrc strace -e file,write -o /tmp/st python
). Zaczynam myśleć, że nie ma sposobu, aby to wyłączyć, ale zachowaj uzupełnianie tabulatorów bez powielania kodu/usr/lib/python3.4/site.py
.Inne rozwiązanie ~ / .pythonrc:
źródło
Aby zapobiec pisaniu w Pythonie
~/.python_history
, wyłącz zaczep, który aktywuje tę funkcję:Jeśli chcesz włączyć uzupełnianie tabulatorów i wyłączyć funkcję historii, możesz dostosować
site.enablerlcompleter
kod. Napisz następujący kod~/.pythonrc
i ustaw goexport PYTHONSTARTUP=~/.pythonrc
w swojej powłoce, aby go włączyć.źródło
Dopóki nie zostanie to w jakiś sposób naprawione w samym Pythonie, możesz to zrobić w systemach UNIX:
Potem dostaniesz
za każdym razem, gdy kończysz działanie powłoki Pythona. Status wyjścia będzie nadal wynosił
0
.Zauważ, że jeśli pozostawisz go jako plik, musisz utworzyć i uczynić niezmiennym innym plikiem,
~/.python_history
źródło
Umieść następujące elementy w pliku i ustaw
PYTHONSTARTUP
go (lub wywołaj pliksitecustomize.py
i udostępnij go wPYTHONPATH
)W ten sposób nadal będziesz mieć dostęp do uzupełniania tabulatorów i poprzedniej historii, ale wprowadzone polecenia nie zostaną dodane do pliku historii.
źródło
PYTHONSTARTUP
skrypt jest rzeczywiście wykonywany.Oto moja metoda (która okazała się zasadniczo bardziej niezawodną i pythoniczną wersją metody berdario). Wyłącza tylko zapisywanie
.python_history
, ale nie czytanie z niego, jeśli istnieje, ani dołączanie nowych wierszy do historii bieżącego wystąpienia. Zalecam zapisanie go jakosite-packages/sitecustomize.py
, ponieważsite
jest to moduł, który zarówno zapisuje, jak.python_history
i importuje,sitecustomize
jeśli istnieje , chociaż nazywanie go czymś innym i wskazywanie goPYTHONSTARTUP
również działa.aktualizacja: co zrobiłem dla wersji 3.7, specyficznej dla mojego systemu, a nie pep8:
źródło
Moje obecne rozwiązanie (dla wystarczającej liczby najnowszych wersji Pythona 3) uniemożliwia domyślne użycie ~ / .python_history, ale pozostawia możliwość wyraźnego zapisu historii do danego pliku (przy użyciu pliku readline.write_history_file (nazwa pliku) lub readline.append_history_file (... )) ma zawierać w pliku PYTHONSTARTUP:
Ma przyjemny (jak dla mnie) efekt uboczny oznaczający dowolnie napisaną historię czasem uruchamiania tłumacza. Działa z powodu poprawki błędu 5845, którą można zobaczyć tutaj .
źródło