Est-il possible de passer une variable d'une session pdb dans la session interactive originale?
Question
J'utilise pdb pour examiner un script ayant appelé run -d
dans une session de ipython.
Il serait utile de pouvoir tracer certaines des variables, mais ai-je besoin dans l'environnement principal de ipython afin de le faire.
Alors, ce que je cherche est un moyen de faire une variable disponible retour dans la principale session interactive après avoir quitté pdb. Si vous définissez une variable dans le cadre le plus élevé, il ne semble être là à la séance de ipython, mais cela ne fonctionne pas pour les images plus bas.
Quelque chose comme export
dans ce qui suit:
ipdb> myvar = [1,2,3]
ipdb> p myvar
[1, 2, 3]
ipdb> export myvar
ipdb> q
In [66]: myvar
Out[66]: [1, 2, 3]
La solution
Par ipython de docs , et aussi une commande run?
de l'invite de ipython,
après exécution, le IPython espace interactif obtient mis à jour avec toutes les variables définies dans le programme (sauf pour
__name__
et sys.argv)
Par « défini dans le programme » (une utilisation légèrement bâclée des termes), cela ne signifie pas « importe où dans toutes les fonctions imbriquées qui s'y trouvent » - cela signifie « dans le globals()
du script / module vous run
ning . Si vous êtes dans une sorte d'imbrication, globals()['myvar'] = [1,2,3]
devrait encore fonctionner correctement, tout comme votre espéré export
serait si elle existait.
Modifier :. Si vous êtes dans un autre module, vous devez définir le nom dans les GLOBALS de votre original un - après une import sys
si nécessaire, sys.modules["originalmodule"].myvar = [1, 2, 3]
fera ce que vous désirez