【发布时间】:2019-08-06 04:21:56
【问题描述】:
cli执行后无法接收键盘输入,这也包括'ctrl-c'和'ctrl-z',所以你必须手动退出程序。给我添了不少麻烦,请看一下;
var { exec, spawn } = require("child_process");
let cmd = (cmdline, consolelog = true) => {
return new Promise((resolve, reject) => {
let cmdarray = cmdline.split(" ");
let result = "";
let error = "";
let child = spawn(cmdarray.shift(), cmdarray);
process.stdin.pipe(child.stdin);
child.stdout.setEncoding("utf8");
child.stderr.setEncoding("utf8");
child.stderr.on("data", data => {
if (consolelog) process.stdout.write(data.toString());
error = data.toString();
});
child.stdout.on("data", data => {
if (consolelog) process.stdout.write(data.toString());
result = data.toString();
});
child.on("close", code => {
if (consolelog) process.stdout.write(`Exit code: ${code}\n`);
code == 0 ? resolve(result) : reject(error);
});
});
};
操作系统:osx & ubuntu 19.04
测试用例:
cmd("echo hi");
编辑:
正常情况:将代码放入myprogram.js,使用node myprogram.js激活脚本。它完美运行,您还可以尝试不同的命令。 但是,如果您使用
$ node
> let cmd = require(PATH_TO_CMD_FUNCTION)
> cmd("echo hi");
node-cli 将冻结并停止收听您的键盘输入。
编辑 2:
发现了,你需要通过{stdio: "inherit"}进行频道
【问题讨论】: