我正在node.js中编写我的第一个应用程序,我不是很熟悉windows,因为我是linux,我想知道我怎么能得到像ping这样的子进程的输出,只是得到毫秒的毫秒数ping结束,例如,这是ping google.com的输出。
Pinging google.com [74.125.226.4] with 32 bytes of
Reply from 74.125.226.4: bytes=32 time=90ms TTL=53
Reply from 74.125.226.4: bytes=32 time=100ms TTL=5
Reply from 74.125.226.4: bytes=32 time=75ms TTL=53
我希望能够将字符串的时间剪切掉^ ^并将其用于其他内容,例如将其存储在数据库中。这个过程在linux中被称为“Grep”,我可以在节点中做什么,可以跨平台工作,因为在我知道的窗口中没有grep等价物。
var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("ping -n 3 google.com", puts);
这是我的node.js代码到目前为止,这只是在子进程中ping谷歌,我得到了puts变量的响应,我希望能够只记录数据库中的时间。
非常感谢你的帮助!
答案 0 :(得分:0)
您可以使用正则表达式提取您喜欢的内容,并使用node.js中的 os 模块的依赖于os的EOL属性来分割行。这是一个完整的示例(我修改过)用于OS X的ping命令。)您可以使用 args 属性为正则表达式构造函数提供更多参数,最重要的是" g"它将查找所有出现的情况一行,而不是第一行。
var sys = require('sys');
var exec = require('child_process').exec;
var EOL = require('os').EOL;
function funGrep(cmd,callback,search,args){
exec(cmd,function(err,stdout){
if(!err){
console.log(err);
return;
}
if(!stdout)
return;
var lines = stdout.toString().split(EOL);
var re = new RegExp(search,args);
for(var line in lines){
var results = lines[line].match(re);
if(results){
for(var i = 0; i < results.length; i++){
callback(results[i]);
}
}
}
});
}
funGrep("ping -c 3 google.com",console.log,"time=[0-9\.]+ ms");
/*
output on OS X:
time=27.878 ms
time=27.652 ms
time=28.134 ms
*/
//for Windows:
funGrep("ping -t 3 google.com",console.log,"time=[0-9\.]+ ?ms");