代码执行

在线运行代码

0次调用
4 积分/次

想给你的编程学习网站、算法刷题平台或者聊天机器人加一个“在线运行代码”的功能?这个接口为你提供了一个安全、隔离的云端代码执行环境。

POST
uapis.cn
/api/v1/execution/run
Body
language
string
required

编程语言及其推荐标识符。

code
string
required

完整的源代码内容。最大 65536 字节。

stdin
string

传递给程序的标准输入流内容。最大 65536 字节。

timeout_ms
integer

用户程序的执行超时时间(毫秒)。范围 1 - 30000。

network
object

沙盒的网络访问策略。未提供时默认采用 offline 断网模式。

mode
string

offline: 完全断网;public: 受控公网访问;internal: 自由访问网络。

allow_hosts
array[string]

public 模式下允许访问的主机列表(限纯域名或IP)。最多 16 项。

支持多个值,用逗号分隔
allow_ports
array[integer]

public 模式下允许访问的目标端口。未提供时默认为 80 和 443。

支持多个值,用逗号分隔
packs
array[string]
请求加载的第三方库运行包。可选值:python-libs、node-libs(JavaScript/TypeScript 共用)、go-libs、c-libs、cpp-libs。各包包含的库请见。不需要时传空数组 [] 或不传。
支持多个值,用逗号分隔

功能概述

提交一段源代码,指定对应的编程语言(支持 Python、JS、C/C++、Go 等),系统会在云端沙盒中编译并执行它,随后返回完整的标准输出(stdout)、标准错误(stderr)以及程序的运行耗时和退出状态。

灵活的输入控制 你可以通过 stdin 参数,向用户程序传递所需的标准输入流,完美支持算法题的用例测试场景。

安全受控的网络策略 代码默认在断网的封闭环境下运行(offline 模式)。如果用户的代码需要拉取外部数据,你可以开启 public 模式,并严格限制允许访问的公网主机(如 api.github.com)和端口,从根源上杜绝恶意网络探测;也可以使用 internal 模式自由访问网络。

第三方库运行包 通过 packs 参数可以为代码加载常用第三方库(如 Python 的 requests、Node 的 axios 等),开箱即用,无需安装。

使用须知

重要

接口返回 HTTP200 仅仅代表“云端成功接收并跑完了这个任务”,并不代表用户的代码成功运行。请务必在前端业务逻辑中,严格依靠响应体内的 status 字段来判断结果(success 为成功,其余可能为 compile_errorruntime_errortimeout)。

容量限制

  • 传入的源代码(code)以及标准输入(stdin)最大均不可超过 65536 字节(按 UTF-8 编码计算)。
  • 执行超时时间最高可设置为 30000 毫秒(30秒)。

请求体

包含了编程语言、源代码主体及各项执行策略参数。必须采用严格 JSON 格式校验。

language
string必填

编程语言及其推荐标识符。

code
string必填

完整的源代码内容。最大 65536 字节。

stdin
string可选

传递给程序的标准输入流内容。最大 65536 字节。

timeout_ms
integer可选

用户程序的执行超时时间(毫秒)。范围 1 - 30000。

network
object可选

沙盒的网络访问策略。未提供时默认采用 offline 断网模式。

mode
string可选

offline: 完全断网;public: 受控公网访问;internal: 自由访问网络。

allow_hosts
string[]可选

public 模式下允许访问的主机列表(限纯域名或IP)。最多 16 项。

allow_ports
integer[]可选

public 模式下允许访问的目标端口。未提供时默认为 80 和 443。

packs
string[]可选
请求加载的第三方库运行包。可选值:python-libs、node-libs(JavaScript/TypeScript 共用)、go-libs、c-libs、cpp-libs。各包包含的库请见。不需要时传空数组 [] 或不传。

响应

200 / 请求成功

云端执行服务成功处理了任务。请通过响应体内的 status 字段判断代码真实运行结果。

JSON
{
  // 用户程序的最终状态。
  "status": "success",
  // 执行环境实际使用的语言名称。
  "language": "python",
  // 程序的标准输出。
  "stdout": "Hello, UapiPro!\n",
  // 程序的标准错误或编译器诊断信息。
  "stderr": "",
  // 进程退出码。若进程未正常产生退出码则返回 null。
  "exit_code": 0,
  // 导致进程终止的信号编号(非信号终止时为 null)。
  "signal": 123,
  // 编译耗时(毫秒)。解释型语言通常为 0。
  "compile_ms": 0,
  // 用户程序实际运行的耗时(毫秒)。
  "run_ms": 20,
  // 执行环境内部调度的总耗时(毫秒)。
  "total_ms": 20,
  // 是否命中执行缓存(当前总是为 false)。
  "cached": false,
  // 是否因超过 timeout_ms 限制被终止。
  "timed_out": false,
  // 标准输出是否因为超出限制被截断。
  "stdout_truncated": false,
  // 标准错误是否因为超出限制被截断。
  "stderr_truncated": false,
  // 执行环境的安全策略说明,主要用于诊断回溯。
  "security_mode": "string",
  // 环境层面的简短错误原因。无额外错误时为 null。
  "error": "string"
}

400 / 错误的请求

请求参数错误或 JSON 语法校验失败(例如:携带了未定义的未知字段、长度越界等)。

JSON
{
  "code": "INVALID_PARAMETER",
  "message": "timeout_ms 必须在 1 到 30000 之间"
}

413 / 请求实体太大

提交的内容过大。可能是源码 (code) 或输入流 (stdin) 超出了 65536 字节的限制。

JSON
{
  "code": "SOURCE_TOO_LARGE",
  "message": "源代码超出最大允许的字节限制"
}

503 / 服务不可用

代码执行沙盒服务暂时不可用或排队队列已满,请稍后重试。

JSON
{
  "code": "EXECUTION_UNAVAILABLE",
  "message": "代码执行服务暂时不可用"
}

504 / 网关超时

服务等待执行结果超时,通常由于系统处于高负载状态导致。

JSON
{
  "code": "EXECUTION_TIMEOUT",
  "message": "等待执行结果超时"
}