@@ -94,60 +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 ))
150-
108+ self .write (export (self .keep_listening (expr ), ** EXPORT_KWARGS ))
151109
152110def evaluate_message (input = None , return_type = None , args = None , ** opts ):
153111
@@ -201,7 +159,6 @@ def start_zmq_instance(port=None, write_to_stdout=True, **opts):
201159
202160def start_zmq_loop (
203161 message_limit = float ("inf" ),
204- redirect_stdout = True ,
205162 export_kwargs = EXPORT_KWARGS ,
206163 evaluate_message = evaluate_message ,
207164 exception_class = None ,
@@ -210,22 +167,17 @@ def start_zmq_loop(
210167):
211168
212169 handler = to_wl (exception_class = exception_class , ** export_kwargs )(handle_message )
213-
214170 socket = start_zmq_instance (** opts )
215-
216171 stream = SocketWriter (socket )
217-
218172 messages = 0
219173
220- if redirect_stdout :
221- sys .stdout = StdoutProxy (stream )
174+ class SideEffectSender (logging .Handler ):
175+ def emit (self , record ):
176+ stream .send_side_effect (record .msg )
222177
223178 side_effect_logger .addHandler (SideEffectSender ())
224179
225180 # now sit in a while loop, evaluating input
226181 while messages < message_limit :
227182 stream .write (handler (socket , evaluate_message = evaluate_message , consumer = consumer ))
228183 messages += 1
229-
230- if redirect_stdout :
231- sys .stdout = sys .__stdout__
0 commit comments