zoukankan      html  css  js  c++  java
  • subprocess如何设置命令超时时间

    一、subprocess如何设置命令超时时间

    最近遇到一个问题,就是我需要在服务器上执行某些shell命令,但是有些命令失败的时候是不会自动终止的,只会一直停在那里,很耗时间。

    因此想到了设置超时时间,而 subprocess 模块是没有超时功能的。至于为什么不用其他模块执行shell命令,因为subprocess比较安全。

    这时我一开始想到的是使用 multiprocessing.Process 进程的守护进程去实现的,但是发现还是很low而且实现不好。

    后面就突然想到了定时器,线程模块有,于是:

    import subprocess
    from threading import Timer
    
    
    def kill_command(p):
        """终止命令的函数"""
        p.kill()
    
    
    def execute(command, timeout):
        # 执行shell命令
        p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    
        # 设置定时器去终止这个命令
        timer = Timer(timeout, kill_command, [p])
    
        try:
            timer.start()
            stdout, stderr = p.communicate()
            return_code = p.returncode
            print(return_code)
            print(stdout)
            print(stdout)
        except Exception as ex:
            print(ex)
        finally:
            timer.cancel()
  • 相关阅读:
    5.Java 线程状态之 TIMED_WAITING
    3.Java 线程状态之 BLOCKED
    4.Java 线程状态之 WAITING
    2.Java 线程状态之 RUNNABLE
    1.关于Java的线程状态
    js注入,canvas截图
    node使用3
    node使用2
    node的使用1
    学习进度报告
  • 原文地址:https://www.cnblogs.com/Zzbj/p/14141428.html
Copyright © 2011-2022 走看看