当前位置: 主页 > 日志 > Python >

Python带timeout的命令执行

下面的方法在Windows下没问题,但Linux下执行超时时,命令进程不能被杀死。

Linux下可以参考该方法:https://gist.github.com/1306188

# coding: utf-8
# 带timeout的命令执行

import time
import subprocess

class TimeoutError(Exception):
    pass

def command(cmd, timeout=60):
    """执行命令cmd,返回命令输出的内容。
    如果超时将会抛出TimeoutError异常。
    cmd - 要执行的命令
    timeout - 最长等待时间,单位:秒
    """
    p = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)
    t_beginning = time.time()
    seconds_passed = 0
    while True:
        if p.poll() is not None:
            break
        seconds_passed = time.time() - t_beginning
        if timeout and seconds_passed > timeout:
            p.terminate()
            raise TimeoutError(cmd, timeout)
        time.sleep(0.1)
    return p.stdout.read()

if __name__ == "__main__":
    print command(cmd='ping www.redicecn.com', timeout=1)

[日志信息]

该日志于 2012-09-06 18:27 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “Python带timeout的命令执行” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部