Python脚本触发SIGINT信号时如何自动移除接口已添加的延迟
问题根因
你的代码存在3个核心错误导致预期逻辑不生效:
signal.signal()的返回值是该信号之前绑定的处理函数,默认返回值不为空,所以你写的if signal.signal(signal.SIGINT, gracefulExit):判断永远为真,添加延迟后会立刻执行移除逻辑- 添加延迟后没有做任何阻塞等待操作,脚本执行完添加逻辑就直接走完流程退出,等不到用户触发Ctrl+C
- 你写的
gracefulExit信号处理函数里没有调用remove_latency的逻辑,就算触发SIGINT也不会执行移除操作
修正后可运行代码
import sys import signal import time import requests import argparse as ap def url(a, b, c): url = f"http://{a}:5000/{c}?ms={b}" return url def main_func(url, endpoint_name): response = requests.get(url) if response.status_code // 100 == 2: print('OK') return True else: print(f"ERROR in {endpoint_name}. URL: {url}. Response code: {response.status_code}") return False def add_latency(mbxIP, latency): return main_func(url(mbxIP, latency, 'add_latency'), "add_latency") def remove_latency(mbxIP, latency): return main_func(url(mbxIP, latency, 'remove_latency'), "remove_latency") def main(): parser = ap.ArgumentParser() parser.add_argument('--latency', help='Latency in ms', required=True) parser.add_argument('--mbxip', help='MBX IP', required=True) parser.add_argument('--addLatency', help='Add latency on interface', action='store_true') parser.add_argument('--removeLatency', help='Remove latency from interface', action='store_true') args = parser.parse_args() # 定义信号处理函数,封装参数和移除逻辑 def gracefulExit(signal_number, frame): print('\nSignal received....Exiting gracefully') if args.addLatency: # 触发信号时先执行移除延迟 remove_latency(args.mbxip, args.latency) sys.exit(0) # 绑定信号处理 signal.signal(signal.SIGINT, gracefulExit) if args.removeLatency: remove_latency(args.mbxip, args.latency) elif args.addLatency: add_latency(args.mbxip, args.latency) print(f"Latency {args.latency}ms added, press Ctrl+C to remove and exit") # 阻塞等待信号,避免脚本直接退出 while True: time.sleep(3600) if __name__ == '__main__': main()
核心修改点
- 调整信号处理函数的定义位置,直接复用main函数内解析好的参数,确保触发SIGINT时可以执行移除延迟逻辑
- 删除了原代码中错误的
if signal.signal()判断分支,避免提前执行移除操作 - 添加延迟后加入死循环阻塞逻辑,让脚本持续运行直到收到Ctrl+C信号
- 修正了原代码缺失的包导入、参数必填校验、分支语法错误等问题
- 把参数解析逻辑移到main函数内,避免全局变量污染
内容的提问来源于stack exchange,提问作者Asad Javed
相关产品推荐
相关产品推荐

