如何从python中的http端点创建用于验证状态的循环?

问题描述

我必须创建 GitLab 管道的验证。 我触发管道,获取其 ID,然后检查该特定管道的状态。 请求 GitLab API 管道端点我得到了一些阶段 - “待定”、“运行”和之后的“成功”或“失败”。 我是python的初学者。 如何使用 python 请求重试该 API 调用并仅获得“成功”或“失败”的结果? 我确实有:

triggered_pipeline_id = "7532"
url = "{0}{1}".format(pipelineurl,triggered_pipeline_id)
response = requests.get(url=url,verify=False,headers=apidata)
raw_content = response.content.decode('UTF-8')
json_output = json.loads(raw_content)
returned_id = str(json_output["id"])
returned_status = str(json_output["status"])

这将立即为我提供状态 - 但它是“待定”或“正在运行”。几秒钟后,它会“成功”或“失败”。但与其睡几秒钟,我想最好重试直到响应“成功”或“失败”。

我认为“while”循环是最好的 - 但我不确定如何实现。

我想到了这一点:

while (( returned_status == "pending" ) || ( returned_status == "running" )):
    time.sleep(5)

这是正确的还是我应该怎么做? 提前感谢您的提示:)

解决方法

假设您的其余代码正常工作...

response = requests.get(url=url,verify=False,headers=apidata)
json_output = response.json()
returned_status = json_output["status"]

while returned_status in ("pending","running"):
    time.sleep(5)

    # repeat the request
    response = requests.get(url=url,headers=apidata)
    json_output = response.json()
    returned_status = json_output["status"]
    
# continue with the rest of your code
print(returned_status)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...