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

为何未设置piped时Deno.Command仍能捕获stdout/stderr?

关于Deno.Command示例与文档说明冲突的疑问

你忽略的核心要点是:调用command.output()方法时,会自动将stdout和stderr的stdio模式隐式设置为"piped",无需在Deno.Command的构造函数中手动配置。

具体来说:

  • Deno.Command的output()方法设计目的就是捕获子进程的标准输出和错误输出,并将它们作为返回结果的一部分。因此当你调用该方法时,Deno会自动调整stdio选项,将stdout和stderr设为"piped",确保这些流的数据能被正确捕获并返回。
  • 文档中提到的「若任何stdio选项未设置为"piped",访问对应字段会抛出TypeError」,针对的是未通过构造函数或方法隐式配置piped的场景——比如使用spawn()方法但未手动设置stdio,或者尝试访问未被配置为piped的流。而output()方法已经替你完成了这个隐式配置,所以示例代码可以安全访问stdout和stderr字段。

举个对比例子,如果使用spawn()方法,就必须手动配置stdio才能访问流:

const command = new Deno.Command(Deno.execPath(), {
  args: ["eval", "console.log('hello'); console.error('world')"],
  stdio: ["inherit", "piped", "piped"], // 必须手动设置
});
const child = command.spawn();
const { code } = await child.status;
const stdout = await child.stdout.readable.toArray();
const stderr = await child.stderr.readable.toArray();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:57:03