在 Node.js 中获取生成子进程的结果
Get result of spawning child process in Node.js
如何执行子进程并获取结果退出代码和输出(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
这里有几个问题:
spawnResult
实际上是一个抽象类型,在使用之前必须使用Node.Child_process.readAs
转换为Js对象。
JavaScript 使用 ##
运算符访问对象字段。 .
保留用于访问记录字段(#
用于普通 OCaml 对象)。
此外,++
只会连接字符串,而status
是一个int
,而stdout
和stderr
是string_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);
如何执行子进程并获取结果退出代码和输出(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
这里有几个问题:
spawnResult
实际上是一个抽象类型,在使用之前必须使用Node.Child_process.readAs
转换为Js对象。JavaScript 使用
##
运算符访问对象字段。.
保留用于访问记录字段(#
用于普通 OCaml 对象)。
此外,++
只会连接字符串,而status
是一个int
,而stdout
和stderr
是string_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);