如果我在节点js中执行某个shell命令,则输出在控制台上。有没有办法可以将它保存在变量中,因此它可以是POST到Sqlite数据库。
const shell = require('shelljs');
shell.exec('arp -a');
在这种情况下,我想将特定MAC /物理地址的IP地址存储到数据库中。怎么办呢?
非常感谢任何帮助。谢谢
答案 0 :(得分:2)
我只是复制粘贴from the docs。你应该研究更多。
您需要向stdout
var child = exec('arp -a', {async:true});
child.stdout.on('data', function(data) {
/* ... do something with data ... */
});
或者在调用exec
exec('some_long_running_process', function(code, stdout, stderr) {
console.log('Exit code:', code);
console.log('Program output:', stdout);
console.log('Program stderr:', stderr);
});
答案 1 :(得分:2)
您需要获取要传递给const shell = require('shelljs');
const stdout = shell.exec('arp -a').stdout;
的命令的输出。要做到这一点,只需调用stdout,如下所示:
const entries = stdout.split('\r\n');
// entries sample
[ '',
'Interface: 10.17.60.53 --- 0xd',
' Internet Address Physical Address Type',
' 10.11.10.52 6c-4b-90-1d-97-b8 dynamic ',
' 10.10.11.254 xx-yy-53-2e-98-44 dynamic ']
然后解析该输出以获取您的ipaddress:
let ipAddr = null;
for (let i = 0; i < entries.length; i++) {
if (entries[i].indexOf('6c-4b-90-1d-97-b8') > -1) {
ipAddr = entries[i].match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/)[0];
break;
}
}
console.log(ipAddr); // '10.11.10.52'
然后,您可以通过更多操作来过滤您想要的地址。
修改强>:
要获取IP地址,您可以这样做:
SELECT doctor.name
, doctor.surname
, COUNT(checkup.doctor)
FROM doctor
, checkup
WHERE doctor.id = checkup.doctor
GROUP
BY doctor.name
ORDER
BY checkup.doctor
答案 2 :(得分:0)
您可以使用shell.exec
属性.output
访问运行命令的结果。请尝试下面的代码。
var shell = require('shelljs');
var result = shell.exec('arp -a').output;
如果您不想在控制台中显示结果,可以指定silent
选项。
var result = shell.exec('arp -a', {silent: true}).output;
现在,您可以使用正则表达式从result
中提取ip和mac地址。
我得到的命令结果如下:
? (xxx.xxx.xxx.xxx) at xx:xx:xx:xx:xx:xx [ether] on eth0
? (yyy.yyy.yyy.yyy) at yy:yy:yy:yy:yy:yy [ether] on eth0
您可以使用以下代码提取ip和mac。
var res = result.split("\n").map(function(item){
return item.match(/\((\d+\.\d+\.\d+\.\d+)\) at (..:..:..:..:..:..)/);
});
console.log(res[0][1]); //IP of first interface
console.log(res[0][2]); //MAC of first interface
console.log(res[1][1]); //IP of second interface
console.log(res[1][2]); //MAC of second interface
注意强>
.output
属性,但尝试在节点控制台中显示shell.exec
函数。.stdout
属性或exec
函数对我不起作用。他们提出undefined
错误。