我在nodejs中运行一个代码,从变量执行console.log没有问题,但变量a
不包含任何内容:
var a='';
var util = require('util'),
exec = require('child_process').exec,
child;
child = exec('ifconfig eth0',
function (error, stdout, stderr) {
a=stdout.toString();
console.log(a);
})
是否有任何错误导致它未将stdout
消息存储到变量a
?
答案 0 :(得分:1)
如果执行ifconfig eth0
时出错,则stdout
中没有值。例如,我的机器实际上没有名为eth0
的接口,因此stdout
中没有返回任何内容。
尝试手动执行ifconfig eth0
以查看会发生什么。您也可以像这样修改代码:
var a='',b='';
var util = require('util'),
exec = require('child_process').exec,
child;
child = exec('ifconfig eth0',
function (error, stdout, stderr) {
a=stdout.toString();
b=stderr.toString();
console.log(a);
console.log(b);
})
或者,也许您的意思是console.log
确实将输出记录到控制台,但变量a
似乎是空的?
如果是这种情况,请确保您在合适的时间访问a
。只是在您发布的代码的最后一行之后尝试阅读a
将无效,因为设置a=stdout.toString()
的回调还没有运行。
答案 1 :(得分:0)
坦克回复我发现了问题, 确实,我需要考虑stderr,但代码只是一个小的演示 我解决了将变量a声明为数组var a = []
的问题var a= []
var util = require('util'),
exec = require('child_process').exec,
child;
child = exec('ifconfig eth0',
function (error, stdout, stderr) {
a[0]=stdout.toString();
})
现在变量a包含来自stdout的字符串以供将来使用
考虑这篇文章已解决
此致