@@ -51,7 +51,7 @@ def julia(self, line, cell=None):
51
51
# run the code
52
52
ans = Main .seval ('begin\n ' + code + '\n end' )
53
53
# flush stderr/stdout
54
- PythonCall ._flush_stdio ()
54
+ PythonCall ._ipython . _flush_stdio ()
55
55
# copy variables back to Python
56
56
# only copy those which are new or have changed value
57
57
for k in outvars + syncvars :
@@ -74,18 +74,22 @@ def load_ipython_extension(ip):
74
74
end
75
75
end""" )
76
76
else :
77
+ # In Julia 1.7+ redirect_stdout() returns a Pipe object. Earlier versions of Julia
78
+ # just return a tuple of the two pipe ends. This is why we have [1] and [2] below.
79
+ # They can be dropped on earlier versions.
77
80
PythonCall .seval ("""module _ipython
81
+ using ..PythonCall
78
82
const _redirected_stdout = redirect_stdout()
79
83
const _redirected_stderr = redirect_stderr()
80
84
const _py_stdout = PyIO(pyimport("sys" => "stdout"); line_buffering=true)
81
85
const _py_stderr = PyIO(pyimport("sys" => "stderr"); line_buffering=true)
82
- const _redirect_stdout_task = @async write($_py_stdout, $_redirected_stdout)
83
- const _redirect_stderr_task = @async write($_py_stderr, $_redirected_stderr)
86
+ const _redirect_stdout_task = @async write($_py_stdout, $_redirected_stdout[1] )
87
+ const _redirect_stderr_task = @async write($_py_stderr, $_redirected_stderr[1] )
84
88
function _flush_stdio()
85
89
flush(stderr)
86
90
flush(stdout)
87
- flush(_redirected_stderr)
88
- flush(_redirected_stdout)
91
+ flush(_redirected_stderr[2] )
92
+ flush(_redirected_stdout[2] )
89
93
flush(_py_stderr)
90
94
flush(_py_stdout)
91
95
nothing
0 commit comments