web-dev-qa-db-fra.com

Ne pas afficher dans le cahier ipython

J'utilise ipython notebook ( http://ipython.org/notebook.html ) pour faire une démonstration et il semble que la fonction d'impression ne fonctionne pas:

enter image description here

Les commandes de l’image ci-dessus sont réécrites ici pour plus de clarté.

In [1]: 'hello world'
Out [1]: 'hello world'

In [2]: print 'hello world'

En bref, il n'y a pas de sortie d'impression de la [2].

Est-ce que quelqu'un sait s'il s'agit d'un bogue connu? Et est-ce que quelqu'un sait comment le réparer?

45
alvas

J'ai eu un problème d'impression similaire lorsque ma première cellule de code était:

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

Ensuite, j'ai commenté les deuxième et troisième lignes comme ceci:

import sys
#reload(sys)
#sys.setdefaultencoding("utf-8")

Réinitialisez le noyau et relancez le programme. Désormais, mes instructions d'impression fonctionnent correctement.

Plus tard, j'ai constaté que lorsque je rencontrais le problème d'impression pour la première fois, toutes les sorties d'impression étaient en fait envoyées au terminal de la console ipython (sur ma machine Linux), au lieu d'être intégrées au cahier.

50
cnaak

J'ai rencontré un problème similaire (la reload(sys) était dans un paquet que j'ai importé).

Ma solution de contournement était qu'en haut du script, j'importais sys et stockais sys.stdout Dans une variable distincte, par exemple. stdout.

Ensuite, j'importe tous les autres éléments, y compris celui qui appelle reload(sys).

Puis, à la fin, j'ai défini sys.stdout = stdout, Qui redirige la sortie vers le cahier IPython.

23
JoostJM

En prenant ce que @JoostJM a dit, ce qui fonctionne, et en le mettant sous forme de code:

import sys
stdout = sys.stdout
reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdout = stdout

Si vous modifiez le codage par défaut, la sortie est dirigée vers la console. Elle est ensuite redirigée vers le bloc-notes jupyter.

22
princelySid