Est-il possible de passer une variable d'une session pdb dans la session interactive originale?

StackOverflow https://stackoverflow.com/questions/1114080

  •  12-09-2019
  •  | 
  •  

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]
Était-ce utile?

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 running . 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top