100 votes

Drop Python dans REPL (Lecture, Eval, Impression, Boucle)

Existe-t-il un moyen de forcer par programme un script Python à se placer dans une REPL à un moment arbitraire de son exécution, même si le script a été lancé à partir de la ligne de commande?

Edit: Je suppose que je devrais clarifier en précisant pourquoi je veux le faire. J'écris un programme de traçage rapide et sale, dans lequel je veux lire des données à partir de stdin ou d'un fichier, les tracer, puis les déposer dans REPL pour permettre la personnalisation du tracé.

119voto

Jason R. Coombs Points 11130

J'utilise fréquemment ceci:

 def interact():
	import code
	code.InteractiveConsole(locals=globals()).interact()
 

96voto

Alex Points 1063

Vous pouvez essayer d’utiliser l’option interactive pour python:

 python -i program.py
 

Ceci exécutera le code dans program.py, puis passera au REPL. Tout ce que vous définissez ou importez au niveau supérieur de program.py sera disponible.

42voto

joeforker Points 14483

Voici comment vous devriez le faire (IPython > v0.11):

import IPython
IPython.embed()

Pour IPython <= v0.11:

from IPython.Shell import IPShellEmbed

ipshell = IPShellEmbed()

ipshell() # this call anywhere in your program will start IPython

Vous devez utiliser IPython, la Cadillac de Python REPLs. Voir http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython

À partir de la documentation:

Il peut également être utile dans les domaines scientifique le calcul des situations où il est commune à besoin de faire un peu automatique, de calcul intensif de la partie et alors arrêter de regarder les données, les intrigues, etc. L'ouverture d'un IPython instance va donner vous avez un accès complet à vos données et fonctions, et vous pouvez reprendre le programme exécution une fois que vous avez terminé avec la partie interactive (peut-être arrêter plus tard, autant de fois que nécessaire).

18voto

bluszcz Points 1536

Pour utiliser iPython et les fonctionnalités du débogueur, vous devez utiliser ipdb ,

Vous pouvez l'utiliser de la même manière que pdb, avec en plus:

 import ipdb
ipdb.set_trace()
 

17voto

Ned Batchelder Points 128913

Vous pouvez lancer le débogueur:

 import pdb;pdb.set_trace()
 

Vous n'êtes pas sûr de ce que vous voulez pour la réplique, mais le débogueur est très similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X