【问题标题】:Terminate loop at any given time在任何给定时间终止循环
【发布时间】:2016-10-06 03:16:12
【问题描述】:

我有以下代码每 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

如果输入某些内容(例如空格),是否可以让循环在任何给定点终止......同时让上面的代码同时运行

【问题讨论】:

标签: python loops break


【解决方案1】:

您可以将循环放在一个线程中,并使用主线程在键盘上等待。如果“要输入的内容”可以是带有换行符的行(例如,键入命令并输入),那么就可以了

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多