@@ -94,59 +94,18 @@ def execute_from_string(code, globals={}, **opts):
9494 return env [last_expr .name ]
9595
9696
97- class SideEffectSender (logging .Handler ):
98- def emit (self , record ):
99- if isinstance (sys .stdout , StdoutProxy ):
100- sys .stdout .send_side_effect (record .msg )
97+ class SocketWriter :
10198
99+ keep_listening = wl .ExternalEvaluate .Private .ExternalEvaluateKeepListening
102100
103- class SocketWriter :
104101 def __init__ (self , socket ):
105102 self .socket = socket
106103
107104 def write (self , bytes ):
108105 self .socket .send (zmq .Frame (bytes ))
109106
110-
111- class StdoutProxy :
112-
113- keep_listening = wl .ExternalEvaluate .Private .ExternalEvaluateKeepListening
114-
115- def __init__ (self , stream ):
116- self .stream = stream
117- self .clear ()
118-
119- def clear (self ):
120- self .current_line = []
121- self .lines = []
122-
123- def write (self , message ):
124- messages = force_text (message ).split ("\n " )
125-
126- if len (messages ) == 1 :
127- self .current_line .extend (messages )
128- else :
129- self .current_line .append (messages .pop (0 ))
130- rest = messages .pop (- 1 )
131-
132- self .lines .extend (messages )
133- self .flush ()
134- if rest :
135- self .current_line .append (rest )
136-
137- def flush (self ):
138- if self .current_line or self .lines :
139- self .send_lines ("" .join (self .current_line ), * self .lines )
140- self .clear ()
141-
142- def send_lines (self , * lines ):
143- if len (lines ) == 1 :
144- return self .send_side_effect (wl .Print (* lines ))
145- elif lines :
146- return self .send_side_effect (wl .CompoundExpression (* map (wl .Print , lines )))
147-
148107 def send_side_effect (self , expr ):
149- self .stream . write (export (self .keep_listening (expr ), ** EXPORT_KWARGS ))
108+ self .write (export (self .keep_listening (expr ), ** EXPORT_KWARGS ))
150109
151110
152111def evaluate_message (input = None , return_type = None , args = None , ** opts ):
@@ -201,7 +160,6 @@ def start_zmq_instance(port=None, write_to_stdout=True, **opts):
201160
202161def start_zmq_loop (
203162 message_limit = float ("inf" ),
204- redirect_stdout = True ,
205163 export_kwargs = EXPORT_KWARGS ,
206164 evaluate_message = evaluate_message ,
207165 exception_class = None ,
@@ -210,22 +168,17 @@ def start_zmq_loop(
210168):
211169
212170 handler = to_wl (exception_class = exception_class , ** export_kwargs )(handle_message )
213-
214171 socket = start_zmq_instance (** opts )
215-
216172 stream = SocketWriter (socket )
217-
218173 messages = 0
219174
220- if redirect_stdout :
221- sys .stdout = StdoutProxy (stream )
175+ class SideEffectSender (logging .Handler ):
176+ def emit (self , record ):
177+ stream .send_side_effect (record .msg )
222178
223179 side_effect_logger .addHandler (SideEffectSender ())
224180
225181 # now sit in a while loop, evaluating input
226182 while messages < message_limit :
227183 stream .write (handler (socket , evaluate_message = evaluate_message , consumer = consumer ))
228184 messages += 1
229-
230- if redirect_stdout :
231- sys .stdout = sys .__stdout__
0 commit comments