在Node.js中获得产生子进程的结果

时间:2017-11-07 02:36:24

标签: node.js child-process reason bucklescript

如何执行子进程并获取生成的退出代码和输出(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 个答案:

答案 0 :(得分:2)

这里有几个问题:

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

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

  3. 此外,++仅会连接字符串,statusintstdoutstderrstring_buffer。因此,您需要使用字符串插值,它会自动转换为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);