2016-10-05 2 views
0

У меня есть следующий код, который включает/выключает розетку каждые 3 секунды.Завершение цикла в любое заданное время

start_time = time.time() 
    counter = 0 
    agent = snmpy4.Agent("192.168.9.50") 

    while True: 
     if (counter % 2 == 0): 
      agent.set("1.3.6.1.4.1.13742.6.4.1.2.1.2.1.1",1) 
     else: 
      agent.set("1.3.6.1.4.1.13742.6.4.1.2.1.2.1.1", 0) 

     time.sleep(3- ((time.time()-start_time) % 3)) 
     counter = counter + 1 

Есть ли способ я могу иметь петлю прекратить в любой момент, если что-то вводится, (пробел), например ..., позволяя код выше пробега в среднем время

+0

Какова целевая операционная система? –

+0

@PatrickHaugh Я запускаю его на windows os (7) – FreeStyle4

+0

Посмотрите на использование 'msvcrt' https://docs.python.org/2/library/msvcrt.html#console-io –

ответ

0

Вы можете поместите цикл в поток и используйте основной поток, чтобы ждать на клавиатуре. Если это нормально для «чего-то вводить», может быть строка с линией подачи (например, введите команду и введите), то это будет делать

import time 
import threading 
import sys 

def agent_setter(event): 
    start_time = time.time() 
    counter = 0 
    #agent = snmpy4.Agent("192.168.9.50") 

    while True: 
     if (counter % 2 == 0): 
      print('agent.set("1.3.6.1.4.1.13742.6.4.1.2.1.2.1.1",1)') 
     else: 
      print('agent.set("1.3.6.1.4.1.13742.6.4.1.2.1.2.1.1", 0)') 

     if event.wait(3- ((time.time()-start_time) % 3)): 
      print('got keyboard') 
      event.clear() 
     counter = counter + 1 

agent_event = threading.Event() 
agent_thread = threading.Thread(target=agent_setter, args=(agent_event,)) 
agent_thread.start() 

for line in sys.stdin: 
    agent_event.set() 
Смежные вопросы