在node js中提取stdout返回值

问题描述 投票:0回答:1

我有一个 bash 脚本,它输出一个整数值以及如何将该值作为变量获取。

var exec = require('child_process').exec;
var ftpsize;
exec('~/docker-project/ftp.check.sh',
  function (error, stdout, stderr) {
    if (error !== null) {
      console.log(error);
    } else {
    ftpsize=stdout;
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    }
});

console.log('stdout: ' + ftpsize);

标准输出:889951

并且 ftpsize 未定义,如何将标准输出提取为变量。

node.js
1个回答
0
投票

因为

ftp.check.sh
执行后运行的回调是异步调用的,
ftpsize
将是未定义的,因为执行顺序是:

  1. 开始
    exec
  2. console.log('stdout: ' + ftpsize);
    -> 未定义
  3. exec
    已完成,
    ftpsize=stdout;

您可能想了解的是 javascript 中“promise”的概念。但是,长话短说,您想要定义一个返回“未来值”的函数,然后您想要“等待”它完成。

async function run() {
  return new Promise((resolve, reject) => {
    exec('~/docker-project/ftp.check.sh', function (error, stdout, stderr) {
      if (error !== null) {
        console.log(error);
        reject(error)
        return
      }

      console.log('stdout: ' + stdout);
      console.log('stderr: ' + stderr);
      resolve(stdout)
    })
  })
}

然后您可以与

const ftpsize = await run()
run().then(ftpsize => { /* ... */ })

一起食用
© www.soinside.com 2019 - 2024. All rights reserved.