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

Cloudflare Worker执行Python代码需求及报错排查咨询

问题分析与解决方案

可行性说明

这个需求是可行的,但要注意Cloudflare Worker的Python运行环境基于Pyodide,和本地Python环境存在差异——不能直接使用subprocess这类依赖系统进程的模块,得改用Pyodide内置的代码执行方式,同时要处理异步的请求体解析逻辑。

报错原因

你碰到的'PyodideFuture' object has no attribute 'get'错误,核心原因是request.json()是异步方法,返回的是PyodideFuture对象(类似JavaScript的Promise),不能直接调用.get(),必须用await等待它完成才能拿到真正的JSON数据。

另外,subprocess模块在Cloudflare Worker的Pyodide环境中完全不可用,这里没有独立的Python进程可以启动,必须换用Pyodide原生的代码执行方式。

修正后的代码

from js import Response
import sys
from io import StringIO

async def on_fetch(request):
    try:
        # 异步解析请求体的JSON数据
        body = await request.json()
        code_to_execute = body.get("code", "")

        # 重定向标准输出,捕获代码执行结果
        old_stdout = sys.stdout
        captured_output = StringIO()
        sys.stdout = captured_output

        try:
            # 直接执行传入的Python代码
            exec(code_to_execute)
        finally:
            # 恢复标准输出,避免影响后续请求
            sys.stdout = old_stdout

        # 获取捕获的输出内容并返回
        output = captured_output.getvalue()
        return Response.new(output, {"status": 200})
    except Exception as e:
        return Response.new(f"执行代码出错: {str(e)}", {"status": 500})

关键改动说明

  • 将on_fetch改为异步函数,用await处理request.json()的异步结果,直接解决PyodideFuture的报错问题。
  • 移除subprocess模块,改用exec直接执行代码,通过重定向sys.stdout来捕获输出,这是Pyodide环境中获取代码执行输出的正确方式。
  • 添加finally块确保标准输出被恢复,避免后续请求的输出逻辑受影响。

内容的提问来源于stack exchange,提问作者Johanan S A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:21:00