E 'possibile passare una variabile da una sessione di pdb nella sessione interattiva originale?

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

  •  12-09-2019
  •  | 
  •  

Domanda

Sto usando pdb per esaminare uno script dopo aver invitato run -d in una sessione ipython. Sarebbe utile per essere in grado di tracciare alcune delle variabili, ma ho bisogno di loro nell'ambiente ipython principale al fine di farlo.

Quindi quello che sto cercando è un modo per fare una variabile disponibile nel principale sessione interattiva dopo ho smesso PPB. Se si imposta una variabile nella cornice più in alto che sembra essere lì nella sessione ipython, ma questo non funziona per tutti i fotogrammi più in basso.

Qualcosa di simile export di seguito:

ipdb> myvar = [1,2,3]
ipdb> p myvar
[1, 2, 3]
ipdb> export myvar
ipdb> q

In [66]: myvar
Out[66]: [1, 2, 3]
È stato utile?

Soluzione

Per ipython di docs , e anche un comando dal prompt run? ipython,

  

dopo l'esecuzione, l'IPython   namespace interattivo ottiene       aggiornato con tutte le variabili definite nel programma (ad eccezione di __name__       e sys.argv)

Con il termine "definite nel programma" (un uso un po 'sciatta di termini), non significa "ovunque entro le funzioni nidificate trovati lì" - che significa "nel globals() dello script / modulo che stai running . Se siete all'interno di qualsiasi tipo di nidificazione, globals()['myvar'] = [1,2,3] dovrebbe ancora funzionare bene, proprio come il vostro sperati export sarebbe se esistesse.

Modifica :. Se siete in un modulo diverso, è necessario impostare il nome nei globali del vostro originale - dopo un import sys se necessario, sys.modules["originalmodule"].myvar = [1, 2, 3] farà ciò che si desidera

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top