Skip to content

Commit 59f0da1

Browse files
author
Christopher Doris
committed
compat with ipython
1 parent 01399ac commit 59f0da1

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

docs/src/releasenotes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44
* The `__repr__` method of wrapped Julia objects now uses the 3-arg show method for nicer
55
(richer and truncated) display at the Python REPL.
6+
* Bug fixes.
67

78
## 0.9.12 (2023-02-28)
89
* Bug fixes.

pysrc/juliacall/ipython.py

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,38 @@ def load_ipython_extension(ip):
3030
# register magics
3131
ip.register_magics(JuliaMagics(ip))
3232
# redirect stdout/stderr
33+
if ip.__class__.__name__ == 'TerminalInteractiveShell':
34+
# no redirection in the terminal
35+
PythonCall.seval("""begin
36+
function _flush_stdio()
37+
end
38+
end""")
39+
else:
40+
PythonCall.seval("""begin
41+
const _redirected_stdout = redirect_stdout()
42+
const _redirected_stderr = redirect_stderr()
43+
const _py_stdout = PyIO(pyimport("sys" => "stdout"); line_buffering=true)
44+
const _py_stderr = PyIO(pyimport("sys" => "stderr"); line_buffering=true)
45+
const _redirect_stdout_task = @async write($_py_stdout, $_redirected_stdout)
46+
const _redirect_stderr_task = @async write($_py_stderr, $_redirected_stderr)
47+
function _flush_stdio()
48+
flush(stderr)
49+
flush(stdout)
50+
flush(_redirected_stderr)
51+
flush(_redirected_stdout)
52+
flush(_py_stderr)
53+
flush(_py_stdout)
54+
nothing
55+
end
56+
nothing
57+
end""")
58+
ip.events.register('post_execute', PythonCall._flush_stdio)
3359
# push displays
3460
PythonCall.seval("""begin
35-
const _redirected_stdout = redirect_stdout()
36-
const _redirected_stderr = redirect_stderr()
37-
const _py_stdout = PyIO(pyimport("sys" => "stdout"); line_buffering=true)
38-
const _py_stderr = PyIO(pyimport("sys" => "stderr"); line_buffering=true)
39-
const _redirect_stdout_task = @async write($_py_stdout, $_redirected_stdout)
40-
const _redirect_stderr_task = @async write($_py_stderr, $_redirected_stderr)
41-
function _flush_stdio()
42-
flush(stderr)
43-
flush(stdout)
44-
flush(_redirected_stderr)
45-
flush(_redirected_stdout)
46-
flush(_py_stderr)
47-
flush(_py_stdout)
48-
nothing
49-
end
5061
pushdisplay(PythonDisplay())
5162
pushdisplay(IPythonDisplay())
5263
nothing
5364
end""")
54-
ip.events.register('post_execute', PythonCall._flush_stdio)
65+
66+
def unload_ipython_extension(ip):
67+
pass

0 commit comments

Comments
 (0)