python - 如何从我的 Python 脚本中逆转接口上添加的延迟?
问题描述
在我的脚本中,我使用了另一个 Python 脚本中的 api。我可以添加延迟,但与 add_latency 类似,还有另一个功能可以消除延迟,即 remove_latency。我想要做的是在向接口添加延迟之后我想在执行 cntrl c 并调用 sigint 时将其删除。
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)
上面的代码是我用来添加和删除延迟的。下面是sighandler:
def gracefulExit(signal_number, frame):
print('Signal received....Exiting gracefully')
sys.exit(0)
def main():
signal.signal(signal.SIGINT, gracefulExit)
parser = ap.ArgumentParser()
parser.add_argument('--latency', help='Latency in ms')
parser.add_argument('--mbxip', help='MBX IP')
parser.add_argument('--addLatency', help='Add latency on interface', action='store_true')
parser.add_argument('--removeLatency', help='Remove latency from interface', action='store_true')
elif args.addLatency:
add_latency(args.mbxip, args.latency)
if signal.signal(signal.SIGINT, gracefulExit):
remove_latency(args.mbxip, args.latency)
elif args.removeLatency:
remove_latency(args.mbxip, args.latency)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
pass
我无法调用 SIGINT 并消除延迟。正在发生的是立即添加和删除延迟,并退出脚本。我将脚本运行为./script.py --addLatency --latency 25 --mbxip
我想要的是,一旦我添加了延迟,脚本将在使用 control + c 调用 SIGINT 时退出,并在退出之前消除延迟。我怎样才能做到这一点?
解决方案
你不需要使用信号。您必须消除按 ctrl-c 时执行的 except 块中的延迟。
但是在添加延迟后,程序将结束并退出。您应该以某种方式暂停 try 块中的执行,例如使用input()
orsleep(99999999)
推荐阅读
- java - 如何从excel表中的几列中删除过滤器,而不是使用java apache poi的所有列
- python - 不可散列的类型:dict 中的值中的“列表”错误
- javascript - 如何返回此数组中唯一不重复的值?
- asp.net-core - Web api 在 IIS 上给出 404 工作在 IISExpress
- sqlite.swift - 迁移到 Swift 5 后 SQLite.swift 出现问题
- html - 掩码 svg 图像不显示在资源管理器和边缘
- angular - 如何固定瀑布图中条形的宽度以及一组的x轴宽度。?
- excel - 在 Vlookup 上出现“下标超出范围”错误
- python - Google Knowledge API 不返回搜索查询的详细信息,而只显示占位符
- matlab - 获取特定 Simulink 模块的参数并进行比较,Matlab