定时由在python中调用的批处理文件启动的进程

时间:2013-08-22 18:40:43

标签: python testing command-line batch-file throughput

我的python脚本调用批处理文件,该文件通过命令行启动网络吞吐量测试(ixChariot,如Iperf)。

当我为了测试吞吐量而增加此RF测试中的衰减时,ixChariot开始需要永远,并且不响应初始测试持续时间参数。因此,将整个脚本减速停止(或者我应该说它永远持续下去)

如何在T时间结束后结束ixChariot进程并结束测试,以便我的python脚本不会从Popen挂起?

谢谢你们,这个对我来说很难对付

1 个答案:

答案 0 :(得分:1)

您可以尝试围绕流程发出警报

from signal import alarm, signal, SIGALRM, SIGKILL

TIMEOUT=-9

def run_proc_timeout(proc, timeout):

    class _Alarm(Exception):
        pass

    def alarm_handler(signum, frame):
        raise _Alarm

    # setup alarm for timeout length
    signal(SIGALRM, alarm_handler)
    alarm(timeout)

    try:
        stdout, stderr = proc.communicate()
        alarm(0)
    except _Alarm:
        pids = [proc.pid]
        # kill proc and all its children
        return TIMEOUT, "", ""

    return proc.returncode, stdout, stderr