账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    node js 中怎么样把spawn产生的子进程中数据返回给node js主程序
    41
    0

    例如程序:

    include <stdio.h>

    include <unistd.h>

    int main() {
    int cntr = 0;
    while(1) {
    sleep(1);
    cntr++;
    printf(“cntr = %dn”, cntr);
    }

    }
    编译成getpsdata文件后,
    然后通过:
    var spawn = require(‘child_process’).spawn;
    var ps = spawn(’./getpsdata’, {stdio: [‘pipe’, ‘pipe’, ‘pipe’]});

    if(ps.stdout !== null) {

    ps.stdout.on(‘data’, function(data) {
      console.log(‘data’, data.toString());
    });

    }else{

    console.log(ps.stdout);

    }
    // ps.stdout.on(‘data’, function(data) {
    // console.log(‘data’, data.toString());
    // });

    if(ps.stderr !== null) {

    ps.stderr.on(‘data’, function(data) {
      console.log(‘data’, data.toString());
    });

    }else{

    console.log(ps.stderr);

    }

    // ps.stderr.on(‘data’, function(data) {
    // console.log(‘error’, data.toString());
    // });

    ps.on(‘close’, function(code) {
    console.log(‘close’, code);
    });

    ps.on(‘exit’,function(code) {

    console.log(‘exit’, code);

    });

    ps.on(‘error’, function(code) {
    console.log(‘error’, code);
    });
    我想把getpsdata里面的打印的数据传给node的主程序中,应该怎么做呢???

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 爱情ヽ纯属虚构 普通会员 1楼

      在Node.js中,你可以使用回调函数或者Promise来从子进程中获取数据并返回给主程序。以下是一种使用回调函数的方法:

      ```javascript const spawn = require('child_process').spawn;

      // 假设我们有一个命令行参数--data,它代表要输出到子进程中。 const data = '--data some_data';

      // 使用spawn创建一个新的子进程 const child = spawn('bash', [data]);

      // 在子进程中运行一个命令 child.on('data', (data) => { console.log(data); });

      // 关闭子进程 child.on('exit', (code, signal) => { console.log(Child process exited with code ${code} and signal ${signal}); });

      // 主程序调用child.on('data', (data) => {...})来获取子进程的数据 child.on('data', (data) => { console.log(data); }); ```

      在这个例子中,我们首先使用spawn函数创建一个新的子进程,然后使用child.on('data', (data) => {...})来监听子进程的数据事件。当子进程产生新的数据时,child.on('data', (data) => {...})就会被调用,此时data参数就是子进程中产生的新数据。

      在子进程中,我们可以使用console.log(data)来输出数据。当子进程退出时,child.on('exit', (code, signal) => {...})就会被调用,此时codesignal参数就是子进程的退出状态和信号。

      如果你想返回一个Promise来处理子进程的输出,你可以这样修改child.on('data', (data) => {...})

      ```javascript const spawn = require('child_process').spawn;

      // 假设我们有一个命令行参数--data,它代表要输出到子进程中。 const data = '--data some_data';

      // 使用spawn创建一个新的子进程 const child = spawn('bash', [data]);

      // 在子进程中运行一个命令 child.on('data', (data) => { return new Promise((resolve, reject) => { console.log(data); resolve(); }); });

      // 关闭子进程 child.on('exit', (code, signal) => { console.log(Child process exited with code ${code} and signal ${signal}); });

      // 主程序调用child.on('data', (data) => {...})来获取子进程的数据 child.on('data', (data) => { return new Promise((resolve, reject) => { console.log(data); resolve(); }); });

      // 一旦子进程完成输出,Promise就会被resolve child.on('exit', (code, signal) => { child.signal = signal; child.on('data', (data) => {...}); resolve(data); }); ```

      在这个例子中,我们使用Promise来处理子进程的输出。当子进程产生新的数据时,child.on('data', (data) => {...})就会被调用,此时data参数就是子进程中产生的新数据。然后,child.on('exit', (code, signal) => {...})就会被调用,此时child.signal参数就是子进程的退出状态,child.on('data', (data) => {...})就会被调用,此时data参数就是子进程中产生的新数据。当子进程完成输出时,Promise就会被resolve,此时data参数就是子进程中产生的新数据。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部