有没有办法将stdout exec,node.js的值插入到外部变量中?

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

node.js 中通常的 exec 结构是:

exec('ls', (err, stdout, stderr) => { 
   if (err) { 
     console.error(err);     
     return;   
   }   
   console.log(stdout); 
});

是否可以像这样将标准输出值插入外部变量:

var newLS = ''
exec('ls', (err, stdout, stderr) => { 
   if (err) { 
     console.error(err);     
     return;   
   }   
   newLS = stdout;
});
console.log(newLS)

如果您尝试使用上述方法,“newLS”变量将不会改变。 有什么方法可以将标准输出值存储到外部变量中吗?

有一个可能的选择:

newLS = exec('ls', (err, stdout, stderr) => { 
   if (err) { 
     console.error(err);     
     return;   
   }   
   console.log(stdout); 
});
console.log(newLS)

但在这种情况下,newLS 将存储一个带有服务信息的大型 json(类似于 json)对象,而没有输出本身。

javascript backend exec child-process node.js-fs
1个回答
0
投票

问题是,exec 是异步的,因此在 exec 进程完成之前,您最终会调用外部 console.log。在 console.log 之前,您必须等待该过程完成。

像这样的东西应该可以解决问题:

const newLS = await new Promise((resolve, reject) => {
    exec('ls', (err, stdout, stderr) => { 
       if (err) { 
         console.error(err)  
         reject(err)
       }   
       console.log(stdout)
       resolve(stdout)
    })
})
console.log(newLS)

或者您可以使用

execSync
来使其成为一个同步过程。

© www.soinside.com 2019 - 2024. All rights reserved.