Depuis la mise à niveau vers Python 3.4, toutes les commandes interactives sont enregistrées ~/.python_history
. Je ne veux pas que Python crée ou écrive dans ce fichier.
La création d'un lien symbolique vers /dev/null
ne fonctionne pas, Python supprime le fichier et le recrée. La documentation suggère de supprimer le sys.__interactivehook__
, mais cela supprime également la complétion de tabulation. Que faut-il faire pour désactiver l'écriture de ce fichier historique tout en préservant la complétion des tabulations?
Détails supplémentaires:
- Distro: Arch Linux x86_64
- readline 6.3-3
- python 3.4.0-2
python
interactive
Lekensteyn
la source
la source
chattr
. Je recherche un seul fichier de configuration (utilisateur) ou variable d'environnement.chmod
est la solution suggérée par les développeurs de python dans ce rapport de bogue d'il y a quelques semaines, bien qu'il y soit également mentionné~/.inputrc
(il n'y a pas deman readline
BTW, sauf pour la fonction de bibliothèque).inputrc
etchmod
ne fonctionne pas non plus pour moi, le fichier est quand même modifié (Arch Linux). Il existe uneinfo inputrc
page, mais je ne suis généralement pas si content de lire les pages d'informations car elles sont difficiles à parcourir.Réponses:
Depuis Python 3.6, vous pouvez utiliser readline.set_auto_history pour désactiver ceci:
la source
Cela fonctionne pour moi.
Création de
~/.pythonrc
fichier:Exportez-le ensuite:
la source
set_history_length
que quelque chose ne soit magique? La tabulation est effectuée pour les fonctions, pas pour l'historique.~/.python_history
à être écrit (vérifié avecPYTHONSTARTUP=$HOME/.pythonrc strace -e file,write -o /tmp/st python
). Je commence à penser qu'il n'y a aucun moyen de désactiver cela, mais conservez la tabulation sans dupliquer le code de/usr/lib/python3.4/site.py
.Une autre solution ~ / .pythonrc:
la source
Pour empêcher Python d'écrire
~/.python_history
, désactivez le hook qui active cette fonctionnalité:Si vous souhaitez activer la complétion de tabulation et désactiver la fonction d'historique, vous pouvez adapter le
site.enablerlcompleter
code. Écrivez le code suivant~/.pythonrc
et définissez-leexport PYTHONSTARTUP=~/.pythonrc
dans votre shell pour l'activer.la source
Jusqu'à ce qu'il soit corrigé d'une manière ou d'une autre dans Python lui-même, vous pouvez le faire sur les systèmes UNIX:
Après cela, vous obtiendrez
chaque fois que vous terminez un shell python. Le statut de sortie sera toujours
0
.Notez que si vous le laissez en tant que fichier, vous devez créer et rendre immuable un autre fichier,
~/.python_history
la source
Mettez ce qui suit dans un fichier et définissez-
PYTHONSTARTUP
le (ou appelez le fichiersitecustomize.py
et rendez-le accessible à partir duPYTHONPATH
)De cette façon, vous aurez toujours accès à la tabulation et à l'historique précédent, mais les commandes que vous entrez ne seront pas ajoutées au fichier historique.
la source
PYTHONSTARTUP
script est en effet exécuté.Voici ma méthode (qui s'est avérée être fondamentalement une version plus fiable et pythonique de la méthode de berdario). Il désactive uniquement l'écriture
.python_history
, mais pas la lecture s'il existe, ou l'ajout de nouvelles lignes à l'historique de l'instance actuelle. Je recommande de l'enregistrer soussite-packages/sitecustomize.py
, carsite
c'est le module qui écrit.python_history
et importesitecustomize
s'il existe , bien que le nommer autre chose et le pointer avec desPYTHONSTARTUP
œuvres fonctionne aussi.mise à jour: ce que j'ai fait pour 3.7, spécifique à mon système, pas pep8:
la source
Ma solution actuelle (pour les versions assez récentes de Python 3) empêche l'utilisation par défaut de ~ / .python_history mais laisse la possibilité d'écrire explicitement l'historique dans un fichier donné (en utilisant readline.write_history_file (filename) ou readline.append_history_file (... )) doit avoir ce qui suit dans son fichier PYTHONSTARTUP:
Il a l'effet secondaire agréable (pour moi) étiquetant toute histoire explicitement écrite avec l'heure de démarrage de l'interpréteur. Cela fonctionne grâce au correctif du bogue 5845 qui peut être vu ici .
la source