2011-06-13 38 views
0

我正在研究一个脚本,它可以从星号机器上为我做一些日志记录。从linux(centOS)命令行,我可以输入:从sed输出的条形码代码

asterisk -rx "transcoder show" 

它提供我需要记录的输出。这看起来就像这样:

5/5 encoders/decoders of 120 channels are in use. 

我想写一行的日志文件应该是这样的:

YYYY-MM-DD HH-MM-SS  #encoders  #decoders 

,然后我会记录此每隔几分钟,我我有多少个频道正在使用的历史。所以我写了一个小PHP脚本:

<?php 
exec("asterisk -rx \"transcoder show\" | sed 's|\\([0-9]*\\)\/\\([0-9]*\\).*|\\1:\\2|'",$retval); 
$time = date('Y-m-d h:i:s'); 
$vals = explode(":",$retval[0]); 
$encoders = trim($vals[0]); 
$decoders = trim($vals[1]); 
$logString = "$time\t$encoders\t$decoders\n"; 
$fh = fopen('/root/script/trans.log','a'); 
fwrite($fh,$logString); 
fclose($fh); 
?> 

对不起,代码是有点古怪那里,理论上我应该已经能够输出正是我需要的,从sed的,但你看到的代码有我有后改变它,试图解决你会在下面的问题。在测试中,我发现sed脚本在命令行中工作正常;它按预期输出#encoders:#decoders。但是,当我跑的PHP脚本,有人写这样行日志文件:

2011-06-13 10:24:02  ^[[0;37;40m6 6 

我无法揣摩出^ [[0; 37;40米是从哪里来的。据我了解,这是一个颜色代码,用于设置在shell中显示文本的颜色,但sed正在添加,还是来自原始输出?我如何摆脱它?如果我使用echo语句将变量$ encoders和$ decoders输出到命令行,则没有特殊的颜色格式,原始asterisk -rx命令的输出中也没有。

回答

3

这不是sed加入颜色代码,它只是从Asterisk传递过来的。你真正想要做的就是从Asterisk接收没有这些颜色代码的输出。

-n命令将剥离ANSI色彩支持:Asterisk man page

asterisk -nrx \"transcoder show\" 
+0

你说得对,我就找错了对象,这并获得成功! – ctb 2011-06-13 16:46:25