Typescript Deno.run是如何运行的;“回声你好”;导致此文件找不到错误?
在试用Deno的标准库时,我遇到了一个问题-一个生成新子流程的函数 文档中提供了此示例:Typescript Deno.run是如何运行的;“回声你好”;导致此文件找不到错误?,typescript,deno,Typescript,Deno,在试用Deno的标准库时,我遇到了一个问题-一个生成新子流程的函数 文档中提供了此示例: const p = Deno.run({ cmd: ["echo", "hello"], }); 使用--allow run权限运行此命令时,会出现以下错误: error: Uncaught NotFound: The system cannot find the file specified. (os error 2) at unwrapResponse ($deno$/ops/disp
const p = Deno.run({
cmd: ["echo", "hello"],
});
使用--allow run
权限运行此命令时,会出现以下错误:
error: Uncaught NotFound: The system cannot find the file specified. (os error 2)
at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
at Object.sendSync ($deno$/ops/dispatch_json.ts:72:10)
at Object.run ($deno$/ops/process.ts:41:10)
at Object.run ($deno$/process.ts:118:15)
at file:///C:/Users/.../gitgraph-deno/gitgraph.ts:1:16
是对run
in的调用,它本身调用sendSync
in
stacktrace说错误源于dispatch_json.ts第72行。这只是打开第67行中接收到的JSON响应:const resUi8=core.dispatch(opId、argsUi8、zeroCopy)代码>
我认为core.dispatch
一直到358行。那就是我迷路的地方
TLDR:在Deno的引擎罩下的某个地方发生此错误:系统无法找到指定的文件。(操作系统错误2)
当我尝试Deno.run({cmd:[“echo”,“hello”]})时
Deno无法在路径中找到名为echo
的二进制文件:
$deno
Deno 1.0.0
使用ctrl+d或close()退出
>快跑({
cmd:[“echo”,“hello”],
你好
进程{rid:4,pid:24264}
在我的Linux机器上,上面的操作很好,因为我的路径中有一个名为echo
的程序
但是,我没有任何名为foo
的程序:
>Deno.run({
cmd:[“foo”,“hello”],
});
未捕获未找到:没有此类文件或目录(操作系统错误2)
在unwrapResponse($deno$/ops/dispatch_json.ts:43:11)
在Object.sendSync($deno$/ops/dispatch_json.ts:72:10)
在Object.run($deno$/ops/process.ts:45:10)
在Object.run($deno$/process.ts:118:15)
时间:1:6
评估时($deno$/repl.ts:45:34)
在Object.replLoop($deno$/repl.ts:136:13)
因此,当我告诉Deno运行一个名为foo
的程序时,它毫不奇怪地无法找到该程序所在的位置并在新进程中启动它
不幸的是,我不知道如何在您的特定实例中修复此问题,因为它非常特定于设置,但我相信这就是问题所在。As:Deno无法在我的路径中找到名为echo
的二进制文件。
谷歌给我带来了一个在Windows中告诉我echo
只是一个文件,它不是二进制文件
cmd/c
允许您调用cmd.exe的内部和外部命令
考虑到这一点,我使用以下方法解决了我的问题:
Deno.run({cmd:[“cmd”,“/c”,“echo”,“hello”});
而不是:
Deno.run({cmd:[“echo”,“hello”]});
下面是一个示例,用于读取输出:
const p = Deno.run({cmd: ["cmd", "/c", "echo", "hello"], stdout: "piped"});
const output = new TextDecoder('utf-8').decode(await p.output());
console.log(output);
在Windows中说echo
不是一个程序,而是一个命令,是cmd.exe的一部分。也许这就是为什么Deno不能访问它?echo是cmd的内部命令是个问题!Deno.run({cmd:[“cmd”,“/c”,“echo”,“hello”]})
工作正常。在任何操作系统上,传入Deno.run
的命令的运行方式与在运行Deno脚本的同一个shell上手动运行该命令的结果不同,这是非常奇怪的。更奇怪的是,作为一种跨平台语言,Deno没有任何内置方式来运行shell command的工作方式与在shell中手动运行命令的方式相同。我理解技术原因,但这似乎只是一个应该修补的bug的借口。