如何添加超时valueto函数

时间:2018-02-23 16:21:10

标签: python

 #####################################
 # Command code
 ####################################
import shlex
import subprocess


class CommandError(Exception):
   pass


class Command(object):
"""
Class to simplify the process of running a command and getting the output
and return code
"""
    def __init__(self, command=None):
       self.command = command
       self.args = None
       self.subprocess = None
       self.output = None
       self.errors = None
       self.status = None
       self.result = None

   def run(self, command=None):
       if command is not None:
           self.command = command
       if self.command is None:
           raise CommandError('No command specified')
       self.args = shlex.split(self.command)
       self.subprocess = subprocess.Popen(self.args,
                                       stdout=subprocess.PIPE,
                                       stderr=subprocess.PIPE)
       self.output, self.errors = self.subprocess.communicate()
       self.subprocess.wait(60)
       self.status = self.subprocess.returncode
       self.result = (0 == self.status)
       return self.result

   def A(X, logger,device_name,ip_address,value_type, value):
       command_string = "my_command" 
       cmd = Command(command_string)
       time.sleep(1.0)
       if not cmd.run():
           logger.error("cmd.errors = %s", device_name, cmd.errors.rstrip())
       elif 'No Such Instance' in cmd.output:
           logger.error("cmd.output = %s", device_name, cmd.output.rstrip())
       else:
            result = True
            return result

我添加了一个self.subprocess.wait(60)60秒,以便我的命令以指定的超时值运行。

但它抛出以下错误:: self.subprocess.wait(60) TypeError:wait()只取1个参数(给定2个)

代码有什么问题?有谁可以指出这个问题?

1 个答案:

答案 0 :(得分:0)

您必须更改class Command内的代码(可能是Command.run())才能完成其工作而不会阻止脚本执行。没有好的方法可以做你所要求的,而不知道该课程到底做了什么。

解决方案(线程,进程,异步代码)都取决于阻止代码的具体细节,并且通常无法一定推荐。

编辑: 现在您添加了Command类,我们可以检查哪个部分是阻塞的。在您的代码中,阻塞的部分是这一行:

self.subprocess.wait()

幸运的是,该功能有一个timeout参数,您可以在subprocess module documentation中看到。

self.subprocess.wait(60)

如你所说的那样,那将自动等待60秒并抛出错误。

编辑2:

您现在获得的错误意味着您的python版本没有超时参数。你使用的是哪个版本的python?正如您在上面链接的文档中所看到的,至少需要python 3.3才能使用它。