Advertisement
Guest User

Untitled

a guest
Oct 7th, 2015
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import subprocess
  4. import tempfile
  5. import os
  6. import signal
  7.  
  8. class ShellCmd:
  9.  
  10. def __init__(self, cmd):
  11. self.outf = tempfile.NamedTemporaryFile(mode="w")
  12. self.errf = tempfile.NamedTemporaryFile(mode="w")
  13. self.inf = tempfile.NamedTemporaryFile(mode="r")
  14. self.process = subprocess.Popen(cmd, shell=True, stdin=self.inf,
  15. stdout=self.outf, stderr=self.errf,
  16. preexec_fn=os.setsid, close_fds=True)
  17.  
  18. def __del__(self):
  19. if not self.is_done():
  20. self.kill()
  21. self.outf.close()
  22. self.errf.close()
  23. self.inf.close()
  24.  
  25. def get_stdout(self):
  26. with open(self.outf.name, "r") as f:
  27. return f.read()
  28.  
  29. def get_stderr(self):
  30. with open(self.errf.name, "r") as f:
  31. return f.read()
  32.  
  33. def get_retcode(self):
  34. """get retcode or None if still running"""
  35. return self.process.poll()
  36.  
  37. def is_done(self):
  38. return self.process.poll() != None
  39.  
  40. def kill(self):
  41. os.killpg(self.process.pid, signal.SIGTERM)
  42. self.process.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement