我正在编写一个小脚本,该脚本将在星号机器上为我做一些日志记录。从linux(centOS)命令行,我可以键入:
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 = "$timet$encoderst$decodersn";
$fh = fopen('/root/script/trans.log','a');
fwrite($fh,$logString);
fclose($fh);
?>
抱歉,这里的代码有点古怪,理论上我应该能够从sed输出我需要的东西,但你看到的代码是在我更改它以试图解决你将在下面看到的问题之后。在测试中,我发现sed脚本在命令行中运行良好;它按预期输出#编码器:#解码器。但是,当我运行php脚本时,它正在向日志文件中写入这样的行:
2011-06-13 10:24:02 ^[[0;37;40m6 6
我不知道在哪里^[[0;37;40m来自。据我所知,这是一个颜色代码,用于设置外壳中显示文本的颜色,但sed是在添加什么,还是来自原始输出?我该如何处理它?如果我使用echo语句将变量$encoders和$decoders打印到命令行,则没有特殊的颜色格式,原始aste的输出中也没有risk-rx命令。
sed
并不是在添加颜色代码,只是从Asterisk传递。您真正想做的是接收Asterisk的输出,该输出一开始没有这些颜色代码。
-n
命令将去除ANSI颜色支持:星号手册页
asterisk -nrx "transcoder show"