1

如何执行子进程并获取结果退出代码和输出(stdout、stderr)?

就像是

let spawnResult = Node.Child_process.spawnSync("ls");

Js.log("Exit code: " ++ spawnResult.status);

Js.log("Stdout: " ++ spawnResult.stdout);

Js.log("Stderr: " ++ spawnResult.stderr);

不幸的是,这会导致编译错误:

Unbound record field status
4

1 回答 1

2

这里有几个问题:

  1. spawnResult实际上是一种抽象类型,在使用Node.Child_process.readAs之前必须转换为 Js 对象。

  2. 使用运算符访问 JavaScript 对象字段##.保留用于访问记录字段(并且#用于普通 OCaml 对象)。

此外,++只会连接字符串,whilestatus是一个int,并且stdoutstderrstring_buffers。因此,您需要使用字符串插值,它会string自动转换为,在连接之前手动转换它们,或者使用Js.log2

使用字符串插值:

let status = Node.Child_process.readAs(spawnResult)##status;
Js.log({j|Exit code: $status|j});

使用手动字符串转换

Js.log("Exit code: " ++ string_of_int(Node.Child_process.readAs(spawnResult)##status));

使用Js.log2

Js.log2("Exit code: ", Node.Child_process.readAs(spawnResult)##status);
于 2017-11-07T08:01:57.023 回答