Windows环境下Deno.run设置stdout为inherit时终端无输出是什么原因?
问题原因
- 核心是主进程没有等待子进程执行完成就提前退出:
Deno.run仅负责启动子进程,本身是同步非阻塞方法,不会等待子进程执行结束。没有添加等待逻辑时,主进程会在git命令还没完成输出写入就直接终止,继承的标准输出自然没有内容展示。 - Windows平台额外适配问题:Windows下的
git默认依赖MinGW虚拟终端环境,子进程的输出缓冲区只有在进程正常退出时才会主动flush到继承的父进程标准流,主进程提前退出会直接跳过缓冲区flush步骤。
解决方法
在Deno.run后新增等待子进程退出的逻辑即可,修改后代码如下:
const p = Deno.run({ cmd: ['git', 'config', '-l'], stdout: 'inherit', stderr: 'inherit' }) // 等待子进程执行完成,确保所有输出都写入标准流 await p.status()
内容的提问来源于stack exchange,提问作者hewc
相关产品推荐
相关产品推荐

