Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript Deno.run是如何运行的;“回声你好”;导致此文件找不到错误?_Typescript_Deno - Fatal编程技术网

Typescript Deno.run是如何运行的;“回声你好”;导致此文件找不到错误?

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

在试用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/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的借口。