在Node.js中获取产卵subprocess的结果

我如何执行一个subprocess,并得到结果退出代码和输出(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 

这里有几个问题:

  1. spawnResult实际上是一个抽象types,在使用之前,必须使用Node.Child_process.readAs将其转换为Js对象。

  2. JavaScript对象字段是使用##运算符访问的。 . 保留用于访问logging字段( #用于简单的OCaml对象)。

另外, ++只会连接string,而status是一个intstdoutstderrstring_buffer 。 因此,您需要使用string插值,它会自动转换为string ,在连接之前手动转换它们,或者使用Js.log2

使用string插值:

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

使用手动string转换

 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); 
Interesting Posts