我正在研究一个脚本,它可以从星号机器上为我做一些日志记录。从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命令的输出中也没有。
你说得对,我就找错了对象,这并获得成功! – ctb 2011-06-13 16:46:25