[英]Retry for Selenium Exception in Subproces for Python
我有一个带有 selenium 脚本的 python,应该使用每个人不同的参数调用它(我称之为Tester.py ),为了更容易我把它放在一个新的 python 文件中,并用这样的 #subprocess 运行它:
# Explanation about retry is next
@retry(retry_count=5, delay=5)
def job():
try:
subprocess.Popen("python Tester.py -user Margareth", shell=True)
return True
except subprocess.CalledProcessError:
return False
print("System Retrying")
pass
我的重试包装器看起来像这样(但它不起作用):
def retry(retry_count=5, delay=5, allowed_exceptions=()):
def decorator(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
for _ in range(retry_count):
try:
result = f(*args, **kwargs)
if result:
pass
except allowed_exceptions as e:
pass
time.sleep(delay)
return wrapper
return decorator
我对Tester.py 的唯一问题是来自 selenium 的 TimeoutException,如果它失败了x次和x秒延迟,我想重试它,但不知何故 #try-catch 不起作用,我的重试总是导致随机第二次重试,它真的很混乱,有什么线索吗?
不需要函数装饰器来实现重试行为。 它可以通过代码中的“简单” for
循环来完成:
import subprocess
import time
retry_count = 5
delay = 5
success = False
for _ in range(retry_count):
try:
subprocess.Popen("python Tester.py -user Margareth", shell=True)
success = True
break
except subprocess.CalledProcessError:
print("System Retrying")
time.sleep(delay)
在这里,如果subprocess.Popen
调用返回而没有引发错误,我们就会跳出循环,否则我们会重试retry_count
次。
另外,作为旁注,请考虑在执行subproces.Popen
调用时尽量不要使用shell=True
,因为这可能会为想要入侵您的系统的人打开攻击向量。 在当前设置中,没有直接风险,因为没有用户输入或在呼叫中,但通常仍然是尽量避免它的最佳实践。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.