2011-06-13 67 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