Je me retrouve fréquemment à utiliser l'interpréteur de Python pour travailler avec des bases de données, des fichiers, etc. - essentiellement beaucoup de formatage manuel de données semi-structurées. Je ne sauvegarde pas et ne nettoie pas correctement les bits utiles aussi souvent que je le voudrais. Existe-t-il un moyen de sauvegarder mes entrées dans le shell (connexions db, affectations de variables, peu de boucles et bits de logique) - un historique de la session interactive? Si j'utilise quelque chose comme script
j'obtiens trop de bruit standard. Je n'ai pas vraiment besoin de mariner tous les objets - mais s'il y a une solution qui fait ça, ce serait OK. Idéalement, je me retrouverais avec un script qui s'exécutait comme celui que j'avais créé de manière interactive, et je pouvais simplement supprimer les bits dont je n'avais pas besoin. Existe-t-il un package qui fait cela, ou une approche DIY?
MISE À JOUR : Je suis vraiment étonné de la qualité et de l'utilité de ces packages. Pour ceux qui ont des démangeaisons similaires:
- IPython - aurait dû utiliser cela depuis des lustres, un peu ce que j'avais en tête
- réinteragir - très impressionnant, je veux en savoir plus sur la visualisation et cela semble y briller. Sorte d'une application de bureau gtk / gnome qui rend les graphiques en ligne. Imaginez une coque hybride + une calculatrice graphique + une mini éclipse. Distribution des sources ici: http://www.reinteract.org/trac/wiki/GettingIt . Construit correctement sur Ubuntu, s'intègre également aux installateurs de bureau gnome, Windows et Mac.
- bpython - extrêmement cool, beaucoup de fonctionnalités intéressantes, saisie semi-automatique (!), rembobinage, enregistrement d'une touche dans un fichier, indentation, bravo. Distribution de source Python, a tiré quelques dépendances de sourceforge.
Je suis converti, ceux-ci comblent vraiment un besoin entre interprète et éditeur.
In[48]
). Ainsisave filename 1-48
sauverait votre session entière.%load my_useful_session
http://www.andrewhjon.es/save-interactive-python-session-history
la source
Il y a moyen de le faire. Stockez le fichier dans
~/.pystartup
...puis définissez la variable d'environnement
PYTHONSTARTUP
dans votre shell (par exemple dans~/.bashrc
):Vous pouvez également l'ajouter pour obtenir la saisie semi-automatique gratuitement:
Veuillez noter que cela ne fonctionnera que sur les systèmes * nix. Comme readline n'est disponible que sur la plate-forme Unix.
la source
readline.parse_and_bind('tab: complete')
fonctionne si vous utilisez MacPorts Python.Si vous utilisez IPython, vous pouvez enregistrer dans un fichier toutes vos commandes précédentes en utilisant la fonction magique % history avec le paramètre -f , pe:
la source
save
magie. Cela a été très utile%history -g -f full_history.py
pour obtenir l'historique de toutes les sessions, pas seulement celle en cours. Voir aussi: documentation pour% history .Après avoir installé Ipython et ouvert une session Ipython en exécutant la commande:
à partir de votre ligne de commande, exécutez simplement la commande «magique» Ipython suivante pour enregistrer automatiquement l'intégralité de votre session Ipython:
Cela créera un fichier .py au nom unique et stockera votre session pour une utilisation ultérieure en tant que session Ipython interactive ou pour une utilisation dans le (s) script (s) de votre choix.
la source
De plus, la réinteraction vous donne une interface de type bloc-notes pour une session Python.
la source
reinteract
est désormais remplacé par le bloc-notes IPython et QtConsole.En plus d'IPython, un utilitaire similaire bpython a une fonction "enregistrer le code que vous avez entré dans un fichier"
la source
J'ai eu du mal à trouver une réponse, j'étais très nouveau dans l'environnement iPython.
Cela fonctionnera
Si votre session iPython ressemble à ceci
Vous voulez enregistrer des lignes de 1 à 135 puis sur la même session ipython utilisez cette commande
Cela enregistrera toutes vos instructions python dans le fichier test.py de votre répertoire actuel (où vous avez lancé l'ipython).
la source
Il y a% d'histoire magique pour imprimer et sauvegarder l'historique d'entrée (et éventuellement la sortie).
Pour stocker votre session actuelle dans un fichier nommé
my_history.py
:Historique IPython stocke à la fois les commandes que vous entrez et les résultats qu'il produit. Vous pouvez facilement parcourir les commandes précédentes avec les touches fléchées haut et bas, ou accéder à votre historique de manière plus sophistiquée.
Vous pouvez utiliser la fonction% history magic pour examiner les entrées et sorties passées. L'historique des entrées des sessions précédentes est enregistré dans une base de données et IPython peut être configuré pour enregistrer l'historique des sorties.
Plusieurs autres fonctions magiques peuvent utiliser votre historique d'entrée, y compris% edit,% rerun,% rappel,% macro,% save et% pastebin. Vous pouvez utiliser un format standard pour faire référence aux lignes:
Cela prendra la ligne 3 et les lignes 18 à 20 de la session en cours, et les lignes 1-5 de la session précédente.
Voir% historique? pour le Docstring et plus d'exemples.
Assurez-vous également d'explorer les capacités de % store magic pour une persistance légère des variables dans IPython.
Pour restaurer automatiquement les variables stockées au démarrage, spécifiez
c.StoreMagic.autorestore = True
dans ipython_config.py.la source
c.HistoryManager.db_log_output
dans le fichier de configuration.Il suffit de mettre une autre suggestion dans le bol: Spyder
Il a un journal d'historique et un explorateur de variables . Si vous avez travaillé avec MatLab, vous verrez les similitudes.
la source
En ce qui concerne Linux, on peut utiliser la
script
commande pour enregistrer toute la session. Il fait partie duutil-linux
package et devrait donc être sur la plupart des systèmes Linux. Vous pouvez créer et alias ou fonction qui appellerascript -c python
et qui sera enregistré dans untypescript
fichier. Par exemple, voici une réimpression d'un de ces fichiers.Le petit inconvénient ici est que
script
tout enregistre, même les sauts de ligne, chaque fois que vous appuyez sur les espaces arrière, etc. Donc, vous voudrez peut-être utilisercol
pour nettoyer la sortie (voir cet article sur Unix et Linux Stackexchange ).la source
La
%history
commande est géniale, mais malheureusement, elle ne vous permettra pas d'enregistrer des éléments qui étaient% coller dans la session. Pour ce faire, je pense que vous devez faire%logstart
au début (même si je n'ai pas confirmé que cela fonctionne).Ce que j'aime faire c'est
%history -o -n -p -f filename.txt
qui enregistrera la sortie, les numéros de ligne et «>>>» avant chaque entrée (options o, n et p). Voir les documents pour% history ici .
la source
il y a une autre option --- pyslice. dans les "démos et outils de docs de wxpython 2.8", il y a un programme open source nommé "pyslices".
vous pouvez l'utiliser comme un éditeur, et il prend également en charge l'utilisation comme une console ---- exécutant chaque ligne comme un interpréteur interactif avec écho immédiat.
bien sûr, tous les blocs de codes et les résultats de chaque bloc seront automatiquement enregistrés dans un fichier txt.
les résultats sont enregistrés juste derrière le bloc de code correspondant. très pratique.
la source
Si vous utilisez bpython , tout l'historique de vos commandes est par défaut enregistré dans
~/.pythonhist
.Pour enregistrer les commandes pour une réutilisation ultérieure, vous pouvez les copier dans un fichier de script python:
Modifiez ensuite ce fichier pour le nettoyer et placez-le sous le chemin Python (packages de site de l'environnement global ou virtuel, répertoire actuel, mention dans * .pth, ou d'une autre manière).
Pour inclure les commandes dans votre shell, importez-les simplement à partir du fichier enregistré:
la source
Certains commentaires demandaient comment enregistrer toutes les entrées IPython à la fois. Pour% save magic dans IPython, vous pouvez enregistrer toutes les commandes par programme comme indiqué ci-dessous, pour éviter le message d'invite et également pour éviter de spécifier les numéros d'entrée. currentLine = len (In) -1% save -f my_session 1- $ currentLine
L'
-f
option est utilisée pour forcer le remplacement de fichiers etlen(IN)-1
affiche l'invite de saisie actuelle dans IPython, vous permettant d'enregistrer la session entière par programme.la source
Pour ceux qui utilisent
spacemacs
, etipython
qui vient avecpython-layer
, la magie de sauvegarde crée beaucoup de sorties indésirables, en raison de la commande de complétion automatique constante qui fonctionne dans le backround, comme:Pour éviter cela, enregistrez simplement le tampon ipython comme vous en enregistrez normalement un autre:
spc f s
la source
Je voudrais suggérer une autre façon de maintenir la session python via tmux sur linux. vous exécutez tmux, attachez-vous à la session que vous avez ouverte (s'il n'est pas attaché après l'avoir ouvert directement). exécutez python et faites ce que vous faites dessus. puis détachez-vous de la session. le détachement d'une session tmux ne ferme pas la session. la session reste ouverte.
avantages de cette méthode: vous pouvez vous attacher à cette session à partir de n'importe quel autre appareil (au cas où vous pouvez ssh votre PC)
inconvénients de cette méthode: cette méthode ne renonce pas aux ressources utilisées par la session python ouverte jusqu'à ce que vous existiez réellement l'interpréteur python.
la source
Pour enregistrer l'entrée et la sortie sur XUbuntu :
Terminal
dans la barre de menu supérieure et recherchezsave contents
dans la liste déroulanteJe trouve que cela enregistre l'entrée et la sortie, remontant jusqu'à quand j'ai ouvert le terminal. Ce n'est pas spécifique à ipython et fonctionnerait avec des sessions ssh ou d'autres tâches exécutées à partir de la fenêtre du terminal.
la source