36 lines
850 B
Python
36 lines
850 B
Python
|
|
||
|
|
||
|
|
||
|
import subprocess as sp
|
||
|
from threading import Thread
|
||
|
|
||
|
class SubAPI:
|
||
|
|
||
|
def __init__(self):
|
||
|
self.outputListeners = set()
|
||
|
|
||
|
|
||
|
def start(self, args, listenDaemon=True):
|
||
|
self.program = sp.Popen(args, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.STDOUT, universal_newlines=True)
|
||
|
|
||
|
self.t = Thread(target=self.listen, daemon=listenDaemon)
|
||
|
self.t.start()
|
||
|
|
||
|
|
||
|
def listen(self):
|
||
|
while self.program.stdout.readable():
|
||
|
outputLine = self.program.stdout.readline()[:-1]
|
||
|
for listener in self.outputListeners:
|
||
|
listener(outputLine)
|
||
|
|
||
|
def sendInput(self, command):
|
||
|
self.program.stdin.write(command+"\n")
|
||
|
self.program.stdin.flush()
|
||
|
|
||
|
def stop(self):
|
||
|
self.program.terminate()
|
||
|
self.program.stdout.close()
|
||
|
|
||
|
|
||
|
|