É possível passar um a variável de uma sessão pdb na sessão interativa original?

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

  •  12-09-2019
  •  | 
  •  

Pergunta

Eu estou usando pdb para examinar um script ter chamado run -d em uma sessão ipython. Seria útil para ser capaz de traçar algumas das variáveis, mas eu preciso deles no ambiente ipython principal, a fim de fazer isso.

Então o que eu estou procurando alguma maneira de fazer uma volta variável disponível no principal sessão interativa depois que eu parei APO. Se você definir uma variável no quadro superior que parece estar lá na sessão ipython, mas isso não funciona para todos os quadros mais abaixo.

Algo como export no seguinte:

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

In [66]: myvar
Out[66]: [1, 2, 3]
Foi útil?

Solução

O Per ipython docs , e também um comando run? do ipython rápida,

Após a execução, o IPython namespace interativo recebe atualizado com todas as variáveis ??definidas no programa (exceto para __name__ e sys.argv)

Por "definidas no programa" (a utilização ligeiramente desleixado de termos), isso não significa "em qualquer lugar dentro de quaisquer funções aninhadas encontrado lá" - que significa "no globals() do script / módulo que você está running . Se você estiver dentro de qualquer tipo de assentamento, globals()['myvar'] = [1,2,3] ainda deve funcionar bem, assim como o seu esperado export faria se ele existisse.

Editar :. Se você estiver em um módulo diferente, você precisa definir o nome nos globals do seu original - depois de uma import sys se necessário, sys.modules["originalmodule"].myvar = [1, 2, 3] vai fazer o que você deseja

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top