python - 按下 'q' 后如何终止脚本?

标签 python python-3.x multithreading networking sys

下面是一个完整的脚本,我正在尝试自动执行 ping 多个路由器的过程,并每 2 小时执行一次,但我也希望能够在任何给定时间终止它。

def start():
    for file_name in file_list:
        unrechable = []
        rechable = []
        print("Processing:"+file_name,end="\n")
        open_file(file_name, rechable, unrechable)

        if len(unrechable) > 0:
            print("These IP from " + file_name + " are Unrechable:")
            for i in unrechable:
                print(i,end="\n")
            print("")
        else:
            print("All IP's are Rechable from " + file_name)
    return
'''
'''

def open_file(file_name, rechable, unrechable):
    df = pd.read_excel("D:/Network/"+file_name+".xlsx")
    col_IP = df.loc[:, "IP"].tolist()
    col_name = df.loc[:, "Location"].tolist()
    check(col_IP, col_name, rechable, unrechable)
    return
'''
'''

def check(col_IP, col_name, rechable, unrechable):
    for ip in range(len(col_IP)):
        response = os.popen(f"ping {col_IP[ip]} ").read()
        if("Request timed out." or "unreachable") in response:
            print(response)
            unrechable.append(str(col_IP[ip] + " at " + col_name[ip]))
        else:
            print(response)
            rechable.append(str(col_IP[ip] + " at " + col_name[ip]))
    return
'''
'''
def main1():
  while(True):
      start()
      print("Goint to Sleep for 2Hrs")
      time.sleep(60)

def qu():
  while(True):
      if(keyboard.is_pressed('q')):
          print("exit")
          os._exit
'''
'''  

file_list = ["ISP" , "NVR"]

if __name__ == '__main__':
    

    p2 = Thread(target=main1)
    p3 = Thread(target=qu)

    p2.start()
    p3.start()  

我在这里创建了 2 个线程,一个运行主脚本,另一个则查找键盘中断。但是一旦按下 q ,只有一个线程终止。后来我发现不可能同时终止两个线程,此时我完全迷失了

最佳答案

我认为你应该在主线程中监听键盘中断。然后您可以在中断时调用 p2.join()

但是为什么要用q呢? Ctrl+C 不适合您吗?这是默认中断。那么您就不必实现任何其他特殊逻辑。

关于python - 按下 'q' 后如何终止脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76678629/

相关文章:

python - 我将如何在基于银行抢劫文本的游戏中实现计时器,时钟上的时间越长,被盗的钱就越多。

python - 导入tensorflow使python 3.6.5报错

c# - 多线程读取xml文件

python - 在 Crystal-lang 中编写 Python 函数时出错

python - dataframe1 的散点图,标记样式由 dataframe2 中的连续变量确定

python - 迭代组(Python pandas 数据框)

python - 将感叹号后的字母大写

python - 使用 Python 在 OpenCV3 中编写视频时出错

python - 限制 python 脚本的线程数

c++ - 从另一个线程关闭 QTcpSocket