如何在Python中运行指定curl命令(BASH可正常执行,需按回车退出)
如何用Python实现指定的JIRA搜索curl命令并按回车退出?
我需要在Python中运行一条特定的curl命令,这条命令在BASH环境里可以正常执行,作用是搜索JIRA的任务并将结果导出为JSON文件,执行完成后需要按回车键退出。原BASH命令如下:
curl -XN -u user:Pass -X GET -H "Content-Type: application/json" https://jira.company.com/rest/api/2/search?jql=project='"Technology"+AND+summary~"Remove%20User*"+AND+issuetype="Task"+AND+status!="DONE"' | python -m json.tool > /var/lib/rundeck/1.json
我已经尝试了一些Python代码片段(比如引入了subprocess、requests等库),但还没找到正确的实现方式,希望能得到可行的解决方案。
方案一:用subprocess直接调用curl命令
这种方式最贴近你原本的BASH命令逻辑,直接在Python里调用系统的curl命令,执行完后等待用户按回车退出:
#!/usr/bin/python import subprocess def main(): # 定义curl命令,用三重引号包裹避免引号转义的麻烦 curl_cmd = '''curl -XN -u user:Pass -X GET -H "Content-Type: application/json" "https://jira.company.com/rest/api/2/search?jql=project='Technology'+AND+summary~'Remove%20User*'+AND+issuetype='Task'+AND+status!='DONE'" | python -m json.tool > /var/lib/rundeck/1.json''' # 执行命令,shell=True支持管道和重定向语法 subprocess.run(curl_cmd, shell=True) # 等待用户按回车后退出程序 input("执行完成,按回车键退出...") if __name__ == "__main__": main()
注意:
shell=True虽然方便,但如果命令包含用户输入的动态内容,要警惕注入风险,这里你的命令是固定的,所以可以安全使用。另外要确保系统环境中已经安装curl,且Python路径配置正常。
方案二:用requests库直接请求(更Pythonic的方式)
比起调用外部curl命令,直接用Python的requests库发送HTTP请求会更灵活,不需要依赖系统工具,代码也更易维护和扩展:
#!/usr/bin/python import requests import json def main(): # JIRA API地址和搜索条件 api_url = "https://jira.company.com/rest/api/2/search" jql_query = 'project="Technology" AND summary~"Remove User*" AND issuetype="Task" AND status!="DONE"' # 请求头和身份认证信息 request_headers = {"Content-Type": "application/json"} auth_info = ("user", "Pass") # 发送GET请求,自动处理参数编码 response = requests.get(api_url, headers=request_headers, auth=auth_info, params={"jql": jql_query}) # 处理请求结果 if response.status_code == 200: # 格式化JSON内容并写入文件 formatted_json = json.dumps(response.json(), indent=4) with open("/var/lib/rundeck/1.json", "w") as output_file: output_file.write(formatted_json) print("JSON文件导出成功!") else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}") # 等待用户按回车退出 input("执行完成,按回车键退出...") if __name__ == "__main__": main()
这个方案的优势很明显:不需要依赖外部命令,能直接对请求结果做自定义处理(比如错误重试、分页查询),代码可读性和扩展性更强。
内容的提问来源于stack exchange,提问作者Milister
相关产品推荐
相关产品推荐

