##// END OF EJS Templates
Make pageup work.
Make pageup work.

File last commit:

r1457:f504f142
r1490:8726dd74
Show More
pipedprocess.py
70 lines | 2.4 KiB | text/x-python | PythonLexer
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 # encoding: utf-8
"""
Object for encapsulating process execution by using callbacks for stdout,
stderr and stdin.
"""
__docformat__ = "restructuredtext en"
#-------------------------------------------------------------------------------
# Copyright (C) 2008 The IPython Development Team
#
# 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
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
def __init__(self, command_string, out_callback,
end_callback=None,):
Gael Varoquaux
More tests for frontends.
r1457 """ command_string: the command line executed to start the
process.
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)
def run(self):
""" Start the process and hook up the callbacks.
"""
process = Popen((self.command_string + ' 2>&1', ), shell=True,
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()