node使用exec方法开启子进程
原创
©著作权归作者所有:来自51CTO博客作者我的代码呢的原创作品,请联系作者获取转载授权,否则将追究法律责任
在child_process模块中,使用exec方法来开启一个用来执行某些命令的子进程,并且缓存子进程中的输出结果。语法:
exec( command , [options] , [callback] )
command,是必选的参数,参数值为一个字符串,表示需要运行的命令,比如:“git pull”。
options是一个可选参数,为一个对象,其中属性:
- cwd,指定子进程的当前工作目录,可以是绝对路径或者相对路径,默认是null
- env,子进程指定的环境变量,默认是null,
- encoding,用于指定标准输出以及标准错误输出数据的编码格式,默认是utf8
- timeout,子进程超时时间,单位是毫秒。在子进程运行超时的时候,node将使用killSignal所指定的信号强制关闭该子进程。默认是0,不限定子进程的运行时间
- maxbuffer,数据缓存区的最大长度,如果标准输出以及标准错误输出数据的总长度超过时,子进程将被强制关闭,默认值200*1024
- killSignal,指定关闭子进程的信号
案例:先创建test.js文件,内容为:这是一个测试文件
再创建exec.js文件:
const childProcess = require("child_process");
const sp = childProcess.exec("node test.js",function(err,stdout,stderr){
if(err){
console.log("子进程启动失败:",err);
process.exit();
}else{
console.log("子进程标准输出:",stdout.toString());
}
})
当我们在执行exec.js文件的时候,开启一个子进程,来执行“node test.js”,也就是执行test文件,这是标准输出数据是test文件的数据。我们可以将这个数据重新写入另一个文件中,例如:
const childProcess = require("child_process");
childProcess.exec("node test.js", function (err, stdout,) {
if (err) {
console.log("子进程启动失败:", err);
process.exit();
} else {
console.log("子进程标准输出:", stdout.toString());
ex.stdin.write(stdout.toString());
}
})
const ex = childProcess.exec("node test2.js", function (err, stdout,) {
process.exit();
})
test2:
const fs = require("fs");
const out = fs.createWriteStream("./message.txt");
process.stdin.on('data', function (data) {
out.write(data);
process.exit()
})