##// END OF EJS Templates
Merge pull request #1889 from invisibleroads/patch-3...
Merge pull request #1889 from invisibleroads/patch-3 Reconnect when the websocket connection closes unexpectedly. Closes #1577.

File last commit:

r5390:c82649ea
r7405:41f79e73 merge
Show More
pipedprocess.py
74 lines | 2.5 KiB | text/x-python | PythonLexer
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 # encoding: utf-8
"""
Bernardo B. Marques
remove all trailling spaces
r4872 Object for encapsulating process execution by using callbacks for stdout,
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 stderr and stdin.
"""
__docformat__ = "restructuredtext en"
#-------------------------------------------------------------------------------
Matthias BUSSONNIER
update copyright to 2011/20xx-2011...
r5390 # Copyright (C) 2008-2011 The IPython Development Team
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------
gvaroquaux
Clean up code, names, and docstrings.
r1455 from killableprocess import Popen, PIPE
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 from threading import Thread
Gael Varoquaux
Better traceback support.
r1439 from time import sleep
Gael Varoquaux
Make it more probably to get colors in shell commands.
r1506 import os
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437
class PipedProcess(Thread):
Gael Varoquaux
More tests for frontends.
r1457 """ Class that encapsulates process execution by using callbacks for
stdout, stderr and stdin, and providing a reliable way of
killing it.
"""
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437
Bernardo B. Marques
remove all trailling spaces
r4872 def __init__(self, command_string, out_callback,
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 end_callback=None,):
Gael Varoquaux
More tests for frontends.
r1457 """ command_string: the command line executed to start the
Bernardo B. Marques
remove all trailling spaces
r4872 process.
Gael Varoquaux
More tests for frontends.
r1457
out_callback: the python callable called on stdout/stderr.
end_callback: an optional callable called when the process
finishes.
These callbacks are called from a different thread as the
thread from which is started.
"""
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 self.command_string = command_string
self.out_callback = out_callback
self.end_callback = end_callback
Thread.__init__(self)
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437
def run(self):
""" Start the process and hook up the callbacks.
"""
Gael Varoquaux
Make it more probably to get colors in shell commands.
r1506 env = os.environ
env['TERM'] = 'xterm'
gvaroquaux
Fix iptest under windows vista.
r1662 process = Popen(self.command_string + ' 2>&1', shell=True,
Gael Varoquaux
Make it more probably to get colors in shell commands.
r1506 env=env,
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 universal_newlines=True,
Gael Varoquaux
Proper redirection of keystrokes to subprocesses.
r1450 stdout=PIPE, stdin=PIPE, )
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 self.process = process
while True:
out_char = process.stdout.read(1)
Gael Varoquaux
Better traceback support.
r1439 if out_char == '':
if process.poll() is not None:
# The process has finished
break
else:
# The process is not giving any interesting
# output. No use polling it immediatly.
sleep(0.1)
else:
self.out_callback(out_char)
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437
if self.end_callback is not None:
self.end_callback()
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437