Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import multiprocessing
- import os
- import subprocess
- import sys
- import tempfile
- import threading
- import time
- t_fd, t_fn = tempfile.mkstemp()
- os.write(t_fd, b'''\
- #!/bin/sh
- for i in `seq 1 40`; do
- echo $i
- sleep 1
- done
- ''')
- os.close(t_fd)
- class OutputHandler(multiprocessing.Process):
- def __init__(self):
- super(OutputHandler, self).__init__()
- self._pipe_r, self._pipe_w = os.pipe()
- self.stdout = self.stderr = self._pipe_w
- self.start()
- def run(self):
- os.close(self._pipe_w)
- d = os.read(self._pipe_r, 1)
- while d:
- sys.stderr.write(d.decode())
- d = os.read(self._pipe_r, 1)
- def close(self):
- os.close(self._pipe_w)
- class Runner(multiprocessing.Process):
- def __init__(self):
- super(Runner, self).__init__()
- def run(self):
- self.o = OutputHandler()
- p = subprocess.Popen(['/bin/sh', t_fn],
- stdin=open(os.devnull),
- stdout=self.o.stdout,
- stderr=self.o.stderr)
- p.wait()
- self.o.close()
- print('Finished')
- os.unlink(t_fn)
- def main():
- Runner().start()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement