#####################################
# 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个)
代码有什么问题?有谁可以指出这个问题?
答案 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才能使用它。