如何在Python中执行CURL API命令?os.system调用curl报错如何解决
报错原因
你遇到的错误有两个可能的诱因:
- 代码本身存在语法错误:你写的
os.system()参数缺少开头的单引号,传入的不是完整的字符串,语法本身就不合法。 - 你的运行环境中没有安装curl工具,或者curl没有加入系统环境变量PATH,操作系统无法找到curl命令的执行文件,Windows系统默认没有预装curl,容易出现这个问题。
方案1:修复os.system调用的实现
如果要继续使用os.system执行curl,先修正语法,正确包裹命令字符串:
import os # 使用三重引号包裹命令,避免内部引号转义冲突 curl_cmd = '''curl -H "public-api-token: 2dd81854fca7bcbd657bd06a99a46l9s" -X PUT -d "dataMapsGoogle=google.com" https://api.googlemaps/v1/data/url''' os.system(curl_cmd)
注意:该方案需要确保你的设备已安装curl,且curl路径已加入环境变量PATH。
更优的实现方案
强烈推荐放弃调用系统curl的方式,直接使用Python原生的HTTP请求库实现相同功能,或者使用subprocess模块替代os.system。
方案A:使用requests库实现(最推荐)
该方案完全不依赖系统curl,跨平台通用,可调试性和安全性都远高于调用命令行curl。
- 先安装依赖:
pip install requests - 对应实现代码:
import requests # 对应curl的-H参数 headers = { "public-api-token": "2dd81854fca7bcbd657bd06a99a46l9s" } # 对应curl的-d参数 payload = { "dataMapsGoogle": "google.com" } api_url = "https://api.googlemaps/v1/data/url" # 发送PUT请求,对应curl的-X PUT response = requests.put(api_url, headers=headers, data=payload) # 可直接获取响应状态、内容等信息,方便处理 print("响应状态码:", response.status_code) print("响应内容:", response.text)
该方案的优势:
- 无系统依赖,不会出现找不到curl的错误
- 不需要处理命令行特殊字符转义,避免命令注入风险
- 可直接结构化处理请求和响应,调试和二次开发成本低
- 支持完善的异常捕获机制,可以精准处理网络错误、HTTP错误等场景
方案B:使用subprocess模块调用curl(如果必须用系统curl)
如果确实需要调用系统的curl工具,用subprocess替代os.system,可控性和安全性更高:
import subprocess # 拆分命令为列表形式,自动处理转义 cmd_list = [ "curl", "-H", "public-api-token: 2dd81854fca7bcbd657bd06a99a46l9s", "-X", "PUT", "-d", "dataMapsGoogle=google.com", "https://api.googlemaps/v1/data/url" ] # 执行命令并捕获输出 run_result = subprocess.run(cmd_list, capture_output=True, text=True) print("命令标准输出:", run_result.stdout) print("命令错误输出:", run_result.stderr) print("命令退出码:", run_result.returncode)
内容的提问来源于stack exchange,提问作者Komali
相关产品推荐
相关产品推荐

