等待10秒时显示星号的Python脚本

时间:2019-03-18 09:27:23

标签: python asterisk agi

我正尝试使用python AGI脚本在星号中“保留”呼叫,该功能将检查此人是否可用,当他为星号时,将拨打该人(如果不是该人,则应拨打该电话,应等待10)请在几秒钟后再次检查可用性,并在该人员空闲时拨打电话。但是我遇到了一个小问题,在没有人时使用time.sleep(10)函数挂断了电话,我希望这是因为运行脚本的线程将进入睡眠状态,并且星号认为脚本已完成运行并挂起打电话。删除time.sleep()可以在没有时间间隔的情况下得到我想要的东西。

agi = AGI()
agi.verbose("python agi started")
place_call_on_hold("SIP/6001")

def place_call_on_hold(s):
  agi.verbose("entered place_call_on_hold function")
  while True:
    status = agi.get_variable('DEVICE_STATE(%(redirect)s)'%{'redirect':s})
    agi.verbose(status)
    if status == 'NOT_INUSE':
      agi.verbose("Info: place_call_on_hold: calling the number")
      agi.appexec("Dial",s)
    else:
      agi.verbose("Info: place_call_on_hold: sleeping for 10 sec")
      time.sleep(10)

有没有一种方法可以等待10秒而不使用sleep()函数,或者如何确保在time.sleep唤醒之前通话不会结束?

2 个答案:

答案 0 :(得分:0)

为什么不尝试在条件之前和之后的时间差

import time

start = time.time()
end = time.time()

while (end-start) < 10:
    end = time.time()
print(start, end, end-start)

答案 1 :(得分:0)

我仅通过调用Asterisk Wait(10)函数而不是time.sleep(10)来解决了问题。