You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python subprocess执行curl命令异常问题排查求助

问题诊断与解决方案

核心问题

你的curl_command字符串拼接存在语法错误,导致生成的curl命令格式无效:

  • 字符串中错误包含了Python语法的","和f""标记,这部分会被直接当作curl命令的一部分传递,引发命令解析失败
  • 使用shell=True执行字符串形式的命令,容易出现转义、空格解析等问题,且存在安全风险

修复方案

直接改用你已验证可行的列表形式传递命令参数,这是subprocess模块推荐的安全可靠方式:

# Handler for the "/show_account_info" command
@bot.message_handler(commands=['show_account_info'])
def show_account_info(message):
    try:
        with open(f"{message.from_user.id}.txt", "r") as file:
            api_key = file.read().strip()
        
        # 用列表构造curl命令,避免字符串拼接的语法错误
        curl_command = [
            "curl", "-X", "GET",
            "https://api.website.com/v1/system/account",
            "-H", "accept: application/json",
            "-H", f"X-API-Key: {api_key}"
        ]
        print(f"Executing curl command: {' '.join(curl_command)}")  # 打印格式化后的命令
        # 不使用shell=True,直接传递参数列表
        process = subprocess.Popen(curl_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        output, error = process.communicate()

        print(output.decode('utf-8'))  # 打印JSON响应

        if process.returncode != 0:
            print(f"Error executing curl command: {error.decode('utf-8')}")  # 打印curl错误信息
    except FileNotFoundError:
        print("Error: API Key not set. Use 'Set API Key' to set your API Key.")
    except Exception as e:
        print(f"An error occurred: {e}")  # 打印其他异常

额外优化建议

  1. 避免使用shell=True:除非必要,尽量用参数列表传递命令,避免命令注入风险和解析错误
  2. 推荐用Python原生requests库替代curl,代码更简洁易维护:
import requests

# 替换subprocess相关代码
response = requests.get(
    "https://api.website.com/v1/system/account",
    headers={
        "accept": "application/json",
        "X-API-Key": api_key
    }
)
if response.status_code == 200:
    print(response.json())
else:
    print(f"API请求失败: {response.text}")

内容的提问来源于stack exchange,提问作者lushythedev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:52:15