有学有练才叫学习:学而不思则罔,思而不学则殆:学而不习,纸上谈兵,习而不进,画地为牢!

nodejs exec(node使用exec方法开启子进程)

node.js 炮渣日记 3周前 (11-16) 45次浏览 已收录 0个评论 扫描二维码

exec开启子进程

在child_process模块中,使用exec方法来开启一个用来执行某些命令的子进程,并且缓存子进程中的输出结果。语法:

exec( command , [options] , [callback] )

command,是必选的参数,参数值为一个字符串,表示需要运行的命令,比如:“git pull”。

options是一个可选参数,为一个对象,其中属性:

  1. cwd,指定子进程的当前工作目录,可以是绝对路径或者相对路径,默认是null
  2. env,子进程指定的环境变量,默认是null,
  3. encoding,用于指定标准输出以及标准错误输出数据的编码格式,默认是utf8
  4. timeout,子进程超时时间,单位是毫秒。在子进程运行超时的时候,node将使用killSignal所指定的信号强制关闭该子进程。默认是0,不限定子进程的运行时间
  5. maxbuffer,数据缓存区的最大长度,如果标准输出以及标准错误输出数据的总长度超过时,子进程将被强制关闭,默认值200*1024
  6. 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, stderr) {
    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, stderr) {
    process.exit();
})

test2:

const fs = require("fs");
const out = fs.createWriteStream("./message.txt");
process.stdin.on('data', function (data) {
    out.write(data);
    process.exit()
})

最终message文件的内容为:“这是测试文件”

喜欢 (0)
炮渣日记
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址