示例#1
0
    def extend_result(self, cases_result=None, print_out=True):
        """update cases result to the result buffer"""
        self._mutex.acquire()
        if cases_result is not None:
            self._result["cases"].extend(cases_result)

        if print_out:
            for case_it in cases_result:
                LOGGER.info(self._progress % (self._suite_name, case_it["case_id"], case_it["result"]))
                if case_it["result"].lower() in ["fail", "block"] and "stdout" in case_it:
                    LOGGER.info(str2str(case_it["stdout"]))
        self._mutex.release()
示例#2
0
    def extend_result(self, cases_result=None, print_out=True):
        """update cases result to the result buffer"""
        self._mutex.acquire()
        if cases_result is not None:
            self._result["cases"].extend(cases_result)

        if print_out:
            for case_it in cases_result:
                LOGGER.info(self._progress %
                            (self._suite_name, case_it['case_id'], case_it['result']))
                if case_it['result'].lower() in ['fail', 'block'] and 'stdout' in case_it:
                    LOGGER.info(str2str(case_it['stdout']))
        self._mutex.release()
示例#3
0
    def extend_result(self, cases_result=None, print_out=True):
        """update cases result to the result buffer"""
        self._mutex.acquire()
        if cases_result is not None:
            self._result["cases"].extend(cases_result)

        if print_out:
            for case_it in cases_result:
                LOGGER.info(
                    self._progress %
                    (self._suite_name, case_it['case_id'], case_it['result']))
                if case_it['result'].lower() in ['fail', 'block'
                                                 ] and 'stdout' in case_it:
                    LOGGER.info(str2str(case_it['stdout']))
        self._mutex.release()
示例#4
0
def shell_command_ext(cmd="",
                      timeout=None,
                      boutput=False,
                      stdout_file=None,
                      stderr_file=None,
                      callbk=None):
    """shell executor, return [exitcode, stdout/stderr]
       timeout: None means unlimited timeout
       boutput: specify whether print output during the command running
    """
    if stdout_file is None:
        stdout_file = os.path.expanduser("~") + os.sep + "shell_stdout"
        if os.path.isfile(stdout_file):
            stdout_file = "%s%d" % (stdout_file, len(glob.glob("%s*" % stdout_file)))

    if stderr_file is None:
        stderr_file = os.path.expanduser("~") + os.sep + "shell_stderr"
        if os.path.isfile(stderr_file):
            stderr_file = "%s%d" % (stderr_file, len(glob.glob("%s*" % stderr_file)))

    exit_code = None
    wbuffile1 = file(stdout_file, "w")
    wbuffile2 = file(stderr_file, "w")
    rbuffile1 = file(stdout_file, "r")
    rbuffile2 = file(stderr_file, "r")
    cmd_open = subprocess.Popen(args=cmd,
                                shell=True,
                                stdout=wbuffile1,
                                stderr=wbuffile2)
    rbuffile1.seek(0)
    rbuffile2.seek(0)

    def print_log():
        """print the stdout to terminate"""
        if callbk and callable(callbk):
            callbk(rbuffile1.read())
        else:
            sys.stdout.write(rbuffile1.read())
            sys.stdout.write(rbuffile2.read())
            sys.stdout.flush()

    while True:
        exit_code = cmd_open.poll()
        if exit_code is not None:
            break
        if boutput:
            print_log()
        if timeout is not None:
            timeout -= 0.1
            if timeout <= 0:
                exit_code = "timeout"
                killall(cmd_open.pid)
                time.sleep(3)
                break
        time.sleep(0.1)

    if boutput:
        print_log()
    rbuffile1.seek(0)
    rbuffile2.seek(0)
    stdout_log = str2str(rbuffile1.read())
    stderr_log = str2str(rbuffile2.read())
    if 'returncode=' in stdout_log:
        index = stdout_log.find('returncode=') + 11
        exit_code = str(stdout_log[index:]).strip('\r\n')
    stdout_log = '<![CDATA[' + stdout_log + ']]>'
    stderr_log = '<![CDATA[' + stderr_log + ']]>'

    wbuffile1.close()
    wbuffile2.close()
    rbuffile1.close()
    rbuffile2.close()
    os.remove(stdout_file)
    os.remove(stderr_file)
    return [exit_code, stdout_log, stderr_log]
示例#5
0
def shell_command_ext(cmd="",
                      timeout=None,
                      boutput=False,
                      stdout_file=None,
                      stderr_file=None,
                      callbk=None):
    """shell executor, return [exitcode, stdout/stderr]
       timeout: None means unlimited timeout
       boutput: specify whether print output during the command running
    """
    if stdout_file is None:
        stdout_file = os.path.expanduser("~") + os.sep + "shell_stdout"

    if stderr_file is None:
        stderr_file = os.path.expanduser("~") + os.sep + "shell_stderr"

    exit_code = None
    wbuffile1 = file(stdout_file, "w")
    wbuffile2 = file(stderr_file, "w")
    rbuffile1 = file(stdout_file, "r")
    rbuffile2 = file(stderr_file, "r")
    cmd_open = subprocess.Popen(args=cmd,
                                shell=True,
                                stdout=wbuffile1,
                                stderr=wbuffile2)
    rbuffile1.seek(0)
    rbuffile2.seek(0)

    def print_log():
        """print the stdout to terminate"""
        if callbk and callable(callbk):
            callbk(rbuffile1.read())
        else:
            sys.stdout.write(rbuffile1.read())
            sys.stdout.write(rbuffile2.read())
            sys.stdout.flush()

    while True:
        exit_code = cmd_open.poll()
        if exit_code is not None:
            break
        if boutput:
            print_log()
        if timeout is not None:
            timeout -= 0.1
            if timeout <= 0:
                exit_code = "timeout"
                killall(cmd_open.pid)
                time.sleep(3)
                break
        time.sleep(0.1)

    if boutput:
        print_log()
    rbuffile1.seek(0)
    rbuffile2.seek(0)
    stdout_log = str2str(rbuffile1.read())
    stderr_log = str2str(rbuffile2.read())
    if 'returncode=' in stdout_log:
        index = stdout_log.find('returncode=') + 11
        exit_code = str(stdout_log[index:]).strip('\r\n')
    stdout_log = '<![CDATA[' + stdout_log + ']]>'
    stderr_log = '<![CDATA[' + stderr_log + ']]>'

    wbuffile1.close()
    wbuffile2.close()
    rbuffile1.close()
    rbuffile2.close()
    os.remove(stdout_file)
    os.remove(stderr_file)
    return [exit_code, stdout_log, stderr_log]