def run(self):
        '''
        wait for subprocess to terminate and return subprocess' return code.
        If timeout is reached, throw TimedProcTimeoutError
        '''
        def receive():
            if self.with_communicate:
                self.stdout, self.stderr = self.process.communicate(input=self.stdin)
            elif self.wait:
                self.process.wait()

        if not self.timeout:
            receive()
        else:
            rt = threading.Thread(target=receive)
            rt.start()
            rt.join(self.timeout)
            if rt.isAlive():
                # Subprocess cleanup (best effort)
                self.process.kill()

                def terminate():
                    if rt.isAlive():
                        self.process.terminate()
                threading.Timer(10, terminate).start()
                raise salt.exceptions.TimedProcTimeoutError(
                    '{0} : Timed out after {1} seconds'.format(
                        self.command,
                        six.text_type(self.timeout),
                    )
                )
        return self.process.returncode
def run ( self ) : def receive ( ) : if self . with_communicate : self . stdout , self . stderr = self . process . communicate ( input = self . stdin ) elif self . wait : self . process . wait ( ) if not self . timeout : receive ( ) else : rt = threading . Thread ( target = receive ) rt . start ( ) rt . join ( self . timeout ) if rt . isAlive ( ) : self . process . kill ( ) def terminate ( ) : if rt . isAlive ( ) : self . process . terminate ( ) threading . Timer ( 10 , terminate ) . start ( ) raise salt . exceptions . TimedProcTimeoutError ( '{0} : Timed out after {1} seconds' . format ( self . command , six . text_type ( self . timeout ) , ) ) return self . process . returncode
wait for subprocess to terminate and return subprocess' return code.
        If timeout is reached, throw TimedProcTimeoutError