示例#1
0
    def _exec_nonblock(self, commandlist, shell=False, env=None):
        """
        Utility method to launch a command with stdin/stdout file
        descriptors configured in non-blocking mode.
        """
        full_env = None
        if env:
            full_env = os.environ.copy()
            full_env.update(env)

        if self._stderr:
            stderr_setup = PIPE
        else:
            stderr_setup = STDOUT

        # Launch process in non-blocking mode
        proc = Popen(commandlist,
                     bufsize=0,
                     stdin=PIPE,
                     stdout=PIPE,
                     stderr=stderr_setup,
                     shell=shell,
                     env=full_env)

        if self._stderr:
            self.streams.set_stream(self.worker.SNAME_STDERR, proc.stderr,
                                    E_READ)
        self.streams.set_stream(self.worker.SNAME_STDOUT, proc.stdout, E_READ)
        self.streams.set_stream(self.worker.SNAME_STDIN,
                                proc.stdin,
                                E_WRITE,
                                retain=False)

        return proc
示例#2
0
    def _exec_nonblock(self, commandlist, shell=False, env=None):
        """
        Utility method to launch a command with stdin/stdout file
        descriptors configured in non-blocking mode.
        """
        full_env = None
        if env:
            full_env = os.environ.copy()
            full_env.update(env)

        if self._stderr:
            stderr_setup = PIPE
        else:
            stderr_setup = STDOUT

        # Launch process in non-blocking mode
        proc = Popen(commandlist,
                     bufsize=0,
                     stdin=PIPE,
                     stdout=PIPE,
                     stderr=stderr_setup,
                     shell=shell,
                     env=full_env)

        if self._stderr:
            self.fd_error = proc.stderr
        self.fd_reader = proc.stdout
        self.fd_writer = proc.stdin

        return proc