diff options
| author | Christian Heimes <christian@cheimes.de> | 2008-04-19 02:23:57 (GMT) | 
|---|---|---|
| committer | Christian Heimes <christian@cheimes.de> | 2008-04-19 02:23:57 (GMT) | 
| commit | e74c8f2879159367eded0933c9f89b9315f07df8 (patch) | |
| tree | 21c5c11b8af5ae63fe405f07603f6186730c2c18 /Lib/subprocess.py | |
| parent | c873550737cf191a64ea81e9eb50ee7355c7aec7 (diff) | |
| download | cpython-e74c8f2879159367eded0933c9f89b9315f07df8.zip cpython-e74c8f2879159367eded0933c9f89b9315f07df8.tar.gz cpython-e74c8f2879159367eded0933c9f89b9315f07df8.tar.bz2  | |
Added kill, terminate and send_signal to subprocess.Popen
The bits and pieces for the Windows side were already in place. The POSIX side is trivial (as usual) and uses os.kill().
Diffstat (limited to 'Lib/subprocess.py')
| -rw-r--r-- | Lib/subprocess.py | 32 | 
1 files changed, 32 insertions, 0 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 975a924..dc639c9 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -357,6 +357,7 @@ import os  import types  import traceback  import gc +import signal  # Exception classes used by this module.  class CalledProcessError(Exception): @@ -384,6 +385,7 @@ if mswindows:          from win32process import CreateProcess, STARTUPINFO, \                                   GetExitCodeProcess, STARTF_USESTDHANDLES, \                                   STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE +        from win32process import TerminateProcess          from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0      else:          from _subprocess import * @@ -906,6 +908,21 @@ class Popen(object):              self.wait()              return (stdout, stderr) +        def send_signal(self, sig): +            """Send a signal to the process +            """ +            if sig == signal.SIGTERM: +                self.terminate() +            else: +                raise ValueError("Only SIGTERM is supported on Windows") + +        def terminate(self): +            """Terminates the process +            """ +            TerminateProcess(self._handle, 1) + +        kill = terminate +      else:          #          # POSIX methods @@ -1184,6 +1201,21 @@ class Popen(object):              self.wait()              return (stdout, stderr) +        def send_signal(self, sig): +            """Send a signal to the process +            """ +            os.kill(self.pid, sig) + +        def terminate(self): +            """Terminate the process with SIGTERM +            """ +            self.send_signal(signal.SIGTERM) + +        def kill(self): +            """Kill the process with SIGKILL +            """ +            self.send_signal(signal.SIGKILL) +  def _demo_posix():      #  | 
