Ejemplo n.º 1
0
class Spawn(BaseSpawn):
    def __init__(self, cmd):
        self.child = Popen(cmd,
                           shell=True,
                           stdout=PIPE,
                           stdin=PIPE,
                           preexec_fn=setsid,
                           stderr=STDOUT,
                           env=environ)

        self.stdout = Device(self.child.stdout)
        self.stdin = Device(self.child.stdin)

    def install_events(self):
        super(Spawn, self).install_events()

        Stdout(self.stdout)
        Stdin(self.stdin)

        self.stdout.add_map(LOAD, lambda con, data: \
        self.output.append(data))

        self.stdin.add_map(CLOSE, self.handle_close)
        self.stdout.add_map(CLOSE, self.handle_close)

    def dump_signal(self, num):
        killpg(self.child.pid, num)

    def terminate_process(self):
        self.child.kill()
        root.status.set_msg('Killed process!')

    def dump_line(self):
        data = self.input.get('insert linestart', 'insert +1l linestart')
        data = data.encode(self.input.charset)
        self.stdin.dump(data)
        self.input.down()

    def handle_close(self, dev, err):
        root.status.set_msg('Killed process!')
        self.stdout.destroy()
        self.stdin.destroy()
Ejemplo n.º 2
0
from untwisted import core
from untwisted.core import Kill


def on_close(dev, err):
    print('On CLOSE ...', err)

    dev.destroy()
    dev.close()
    raise Kill


def on_load(dev, data):
    print('On LOAD ...', data)


child = Popen(['python', '-i'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)

stdout = Device(child.stdout)
stdin = Device(child.stdin)

FileWriter(stdin)
FileReader(stdout)
stdin.dump(b'print("hello world!")\n')

stdin.add_map(DUMPED, lambda dev: stdin.dump(b'quit()\n'))
stdout.add_map(LOAD, on_load)
stdin.add_map(CLOSE, on_close)
stdout.add_map(CLOSE, on_close)

core.gear.mainloop()