Ich verwende pdb, um ein Skript mit run -d
in einer Ipython-Sitzung zu untersuchen. Es wäre nützlich, einige der Variablen zu plotten, aber ich brauche sie in der Haupt-Ipython-Umgebung, um dies zu tun.Ist es möglich, eine Variable aus einer PDB-Sitzung in die ursprüngliche interaktive Sitzung zu übergeben?
Also was ich suche ist eine Möglichkeit, eine Variable in der interaktiven Sitzung nach dem Beenden von pdb wieder verfügbar zu machen. Wenn Sie eine Variable im obersten Frame festlegen, scheint sie in der ipython-Sitzung vorhanden zu sein, aber dies funktioniert nicht für weiter unten liegende Frames.
So etwas wie export
im Folgenden:
ipdb> myvar = [1,2,3]
ipdb> p myvar
[1, 2, 3]
ipdb> export myvar
ipdb> q
In [66]: myvar
Out[66]: [1, 2, 3]
Ich hatte versucht, die Variable zu einem globalen machen, aber das scheint nicht zu funktionieren, wenn ein anderes Modul in einem der Frames aufgerufen wurde. Wenn Sie zum Beispiel test.py ausführen, das eine Funktion in test2.py aufruft und dann ein globales Element in diesem Frame deklariert, kann ich es weder in den höheren Frames (die in einem anderen Modul ausgeführt werden) noch im ipython-Namespace sehen. – ihuston
Wenn Sie sich in einem anderen Modul befinden, müssen Sie den Namen in den Globals Ihres Originals eingeben und meine Antwort entsprechend bearbeiten. –
Stellt sich heraus, dass eine globale Variable in einem Rahmen innerhalb eines Moduls, das aus dem ursprünglichen Skript aufgerufen wird, es nur in dem __dict__ dieses Moduls setzt. Also vom obersten Frame ist "test2" in globals() und "myvar" ist in globals() ["test2"] .__ dict__. Ich denke, ich vermutete, dass die globale Variable würde es direkt in globals() für den oberen Frame (und Ipython) setzen, aber das scheint nicht zu funktionieren. – ihuston