child_process
是 Node.js 的一个内建模块,用于分裂出(spawn)一个子进程,执行一些特定操作。.exec()
是它的方法,接受一个参数,即要执行的 shell 命令,然后通过回调返回结果。.exec()
与 .spawn()
的不同之处在于,前者重在返回结果,后者则重在返回内容。所以当你需要执行一个命令,你并不关心执行过程中发生了什么,只要看到结果就好,那么就用 .exec()
;反之,假如执行过程中产生的信息对你特别有价值,你并不是特别在意结果,就应该用 .spawn()
。
另外,我之前在《Node.js 8 中的 util.promisify》中介绍过,Node.js 8 引入了一个新函数,位于 util
模块,叫做 promisify()
,用于将回调风格的 Node.js 函数改造成 Promise 规范的函数。
OK,背景知识介绍结束。近期开发中,我需要执行一个命令,并且取得它的 stdout
,stderr
和 exit code
,使用 promisify()
之后发现没有 exit code
,于是只好重新写了一下,代码如下:
import {exec as BaseExec} from 'util';
function exec(command, options) {
return new Promise((resolve, reject) => {
let result = {};
const cp = baseExec(command, options, (err, stdout, stderr) => {
if (err) {
err.stdout = stdout;
err.stderr = stderr;
reject(err);
return;
}
result.stdout = stdout;
result.stderr = stderr;
if ('code' in result) {
resolve(result);
}
});
cp.on('exit', (code, signal) => {
result.code = code;
result.signal = signal;
if ('stdout' in result) {
resolve(result);
}
});
});
}
希望对大家有用。
新键盘到了,FC660C,静电容,试用一下,效果还不错。略硬,段落感不强,声音不大。
欢迎吐槽,共同进步