Desde la actualización a Python 3.4, se registran todos los comandos interactivos ~/.python_history
. No quiero que Python cree o escriba en este archivo.
Crear un enlace simbólico a /dev/null
no funciona, Python elimina el archivo y lo vuelve a crear. La documentación sugiere eliminar el sys.__interactivehook__
, pero esto también elimina la finalización de tabulación. ¿Qué se debe hacer para deshabilitar la escritura de este archivo de historial pero aún así preservar la finalización de tabulación?
Detalles adicionales:
- Distribución: Arch Linux x86_64
- readline 6.3-3
- Python 3.4.0-2
python
interactive
Lekensteyn
fuente
fuente
chattr
. Estoy buscando un único archivo de configuración (usuario) o variable de entorno.chmod
es la solución sugerida por los desarrolladores de python en este informe de error de hace unas semanas, aunque también hay alguna mención de~/.inputrc
allí (no hayman readline
, por cierto, excepto por la función de biblioteca).inputrc
embargo, no sé cómo usarlo ychmod
tampoco funciona para mí, el archivo se modifica de todos modos (Arch Linux). Existe unainfo inputrc
página, pero generalmente no estoy tan contento con leer páginas de información, ya que son difíciles de navegar.Respuestas:
A partir de Python 3.6, puede usar readline.set_auto_history para deshabilitar esto:
fuente
Esto funciona para mi.
Creando
~/.pythonrc
archivo:Luego exportarlo:
fuente
set_history_length
haga algo mágico? La finalización de tabulación se realiza para funciones, no para el historial.~/.python_history
que se escriba (se verifique conPYTHONSTARTUP=$HOME/.pythonrc strace -e file,write -o /tmp/st python
). Empiezo a pensar que no hay forma de desactivar esto, pero mantengo la finalización de tabulación sin duplicar el código/usr/lib/python3.4/site.py
.Otra solución ~ / .pythonrc:
fuente
Para evitar que Python escriba
~/.python_history
, deshabilite el enlace que activa esta funcionalidad:Si desea habilitar la finalización de pestañas y deshabilitar la función de historial, puede adaptar el
site.enablerlcompleter
código. Escriba el siguiente código~/.pythonrc
y configúreloexport PYTHONSTARTUP=~/.pythonrc
en su shell para habilitarlo.fuente
Hasta que se solucione de alguna manera en Python, puede hacer esto en sistemas UNIX:
Después de eso obtendrás
cada vez que terminas un shell de python. El estado de salida seguirá siendo
0
.Tenga en cuenta que si lo deja como archivo, debe crear y hacer inmutable otro archivo,
~/.python_history
fuente
Ponga lo siguiente en un archivo y configúrelo
PYTHONSTARTUP
(o llame al archivositecustomize.py
y haga que sea accesible desde elPYTHONPATH
)De esta manera, todavía tendrá acceso a la finalización de pestañas y al historial anterior, pero los comandos que ingrese no se agregarán al archivo de historial.
fuente
PYTHONSTARTUP
se ejecuta el script.Aquí está mi método (que resultó ser básicamente una versión más confiable y pitónica del método de berdario). Solo inhabilita la escritura
.python_history
, pero no la lectura si existe, o la adición de nuevas líneas al historial de la instancia actual. Recomiendo guardarlo comosite-packages/sitecustomize.py
, porquesite
es el módulo en el que escribe.python_history
e importasitecustomize
si existe , aunque nombrarlo de otra manera y señalarlo tambiénPYTHONSTARTUP
funciona.actualización: lo que hice para 3.7, específico para mi sistema, no pep8:
fuente
Mi solución actual (para versiones suficientemente recientes de Python 3) evita el uso predeterminado de ~ / .python_history pero deja la posibilidad de escribir explícitamente el historial en un archivo determinado (usando readline.write_history_file (nombre de archivo) o readline.append_history_file (... )) es tener lo siguiente en el archivo PYTHONSTARTUP:
Tiene el efecto secundario agradable (para mí) de etiquetar cualquier historia escrita explícitamente con el tiempo de inicio del intérprete. Funciona debido a la corrección del error 5845 que se puede ver aquí .
fuente