Historique persistant de la ligne de commande Python

Je voudrais être en mesure de "flèche haut" pour les commandes que j'ai entrée dans un précédent de l'interpréteur Python. J'ai trouvé le readline module qui offre des fonctions comme: read_history_filewrite_history_fileet set_startup_hook. Je ne suis pas tout à fait suffisamment malin pour mettre cela en pratique, cependant, si quelqu'un pourrait s'il vous plaît aider? Mes pensées sur la solution sont:

(1) Modifier .connexion PYTHONSTARTUP pour exécuter un script python.
(2) Dans ce script python fichier faire quelque chose comme:

def command_history_hook():
    import readline
    readline.read_history_file('.python_history')
command_history_hook()

(3) Chaque fois que l'interprète de sorties, d'écrire l'histoire dans le fichier. Je suppose que la meilleure façon de le faire est de définir une fonction dans votre script de démarrage et de sortie à l'aide de cette fonction:

def ex():
    import readline
    readline.write_history_file('.python_history')
    exit()

C'est très ennuyeux d'avoir à quitter l'aide de parenthèses, si: ex(). Est-il un python de sucre qui permettrait ex (sans les parenthèses) pour exécuter le ex fonction?

Est-il un meilleur moyen pour que le fichier de l'historique d'écrire à chaque fois? Merci d'avance pour toutes les solutions/suggestions.

Aussi, il y a deux choix architecturaux que je peux voir. Un seul choix est d'avoir un commandement unifié de l'histoire. L'avantage est la simplicité (l'alternative qui suit portées à votre répertoire d'accueil avec un lot de fichiers.) L'inconvénient est que les interprètes vous courez dans des bornes séparées seront remplis avec les uns des autres de commande d'histoires, et elles remplacent l'un l'autre de l'histoire. (ce n'est pas grave pour moi car d'habitude je suis intéressé par la fermeture d'un interprète et la réouverture de l'un immédiatement pour recharger les modules, et dans ce cas, qui interprète les commandes ont été écrites dans le fichier.) Une solution possible de séparer les fichiers d'historique par terminal est d'écrire une variable d'environnement pour chaque nouveau terminal à vous de créer:

def random_key()
    ''.join([choice(string.uppercase + string.digits) for i in range(16)])

def command_history_hook():
    import readline
    key = get_env_variable('command_history_key')
    if key:
        readline.read_history_file('.python_history_{0}'.format(key))
    else:
        set_env_variable('command_history_key', random_key())

def ex():
    import readline
    key = get_env_variable('command_history_key')
    if not key:
        set_env_variable('command_history_key', random_key())
    readline.write_history_file('.python_history_{0}'.format(key))
    exit()

Par la diminution de l'aléatoire de la longueur de la clé de 16 à dire 1 vous pouvez diminuer le nombre de fichiers qui jonchent votre répertoires à 36 au détriment des possibles (2.8% de chance) de chevauchement.

source d'informationauteur Carl G