Print not showing in ipython notebook

86,655

Solution 1

I had a similar printing problem when my first code cell was:

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

Then I've commented the second and third lines like this:

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

Reset the kernel and re-ran the program and now my print statements are working properly.

Later on, I've found that when I was first having the printing problem, all print outputs were actually being sent to the ipython console terminal (on my Linux box), instead of being embed on the notebook.

Solution 2

I encountered a similar problem (the reload(sys) was in a package I imported).

My workaround was that at the top of the script, I import sys, and store sys.stdout in a separate variable, e.g. stdout.

Then I import all the other stuff, including the one that calls reload(sys).

Then, at the end, I set sys.stdout = stdout, which redirects the output back to the IPython notebook

Solution 3

Taking what @JoostJM has said, which works, and putting it as code:

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

Changing the default encoding directs the output to the console, this sets it back to the jupyter notebook.

Solution 4

I am using Python 3, so the solution is a bit different for me.

import sys
stdout = sys.stdout

# some functions that mess up sys.stdout

sys.stdout = stdout
Share:
86,655
alvas
Author by

alvas

食飽未?

Updated on December 08, 2020

Comments

  • alvas
    alvas over 3 years

    I am using ipython notebook (http://ipython.org/notebook.html) to do a demo and it seems like the print function is not working:

    enter image description here

    The commands in the above picture are rewritten here for clarity.

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

    In short, there's no print output from the [2].

    Does anyone know whether it's a known bug? And does anyone know how to fix it?

  • patapouf_ai
    patapouf_ai over 9 years
    Same for me. All print outputs are sent to the console. Also setting default encoding to utf8.
  • AsAP_Sherb
    AsAP_Sherb almost 7 years
    This should be the correct answer. The answer above doesn't solve the issue if you need the default encoding to be utf8. The real problem is that by reloading sys, it resets the stdout to the console, so you need to reset it back as shown here.
  • JoostJM
    JoostJM over 6 years
    This is all well and good, but does not fix the problem if the call to reload(sys) is inside another python package (e.g. pykwalify==1.5.2). The other fix in this thread does, as it stores the outputstream, the does the reloading of sys (wherever it happens) and then resets the outputstream to the one you stored.
  • user2584621
    user2584621 almost 6 years
    print("Hello World") if using Python 3
  • Pyd
    Pyd about 4 years
    reload not defined