2015-11-06 30 views
0

我已經編寫了Python腳本並作爲服務運行,腳本本身檢查網絡流量並最終吐出打印語句。 我不知道如何才能在最後看到打印文本。它會顯示在終端上?從服務在終端上打印文本

想法是,如果此腳本作爲服務運行並且已登錄,我想查看打印結果。

service.conf(修正運行級別,如果有什麼不對的地方爲好,我可以運行此爲最後服務)

description "Network Check" 
author "I am the user" 

start on runlevel [234] 
stop on runlevel [0156] 

chdir /home/foo 
exec /home/foo/test.py 
respawn 

腳本:

#!/usr/bin/python 
import psutil 
import time 
final_bytes=0 
diff=0 
while ((final_bytes/1000000) < 500): 
    bytes = psutil.net_io_counters() 
    if (bytes.bytes_recv - diff) > 1000000: 
     time.sleep(1) 
     if final_bytes != 0: 
       final_bytes = final_bytes + (bytes.bytes_recv - diff) 
     else: 
       final_bytes =1 
    else: 
     time.sleep(0.5) 
    diff = bytes.bytes_recv 

print "Total Bytes transferred: ", final_bytes/1000000 ,"MB" 
+0

你有沒有考慮過把內容輸出到系統日誌服務器或其他什麼東西。這允許您根據需要在本地或遠程日誌記錄服務器上進行日誌記錄。 Python日誌工具能夠將內容發送到UDP端口(514 for syslog) –

+0

@BrianCain我對Ubuntu/Linux和Python非常新穎,我爲了學習的目的而編寫了這個程序,而且我的設置是一個獨立的服務器。你能再詳細一點嗎?看起來像Syslog是用於網絡監控。 – Fenomatik

+0

@BrianCain我認爲我得到了你在這裏說的,我正在研究它,但最重要的是,我最初的想法是獲得某種即時警報(也許閃爍的文字等)作爲警報的一種形式。你認爲這可以在終端上實現嗎?我相信,如果沒有用戶登錄,將不可能。但是如果我登錄?我更像是一個SCOM傢伙:) – Fenomatik

回答

0

一可能的選擇是設置一個系統日誌服務器(本地或遠程)來記錄你的輸出。

import logging 
import logging.handlers 

# Set up the logging 
FORMAT = "[%(filename)s:%(lineno)s - %(funcName)20s ] %(message)s\n" 
logging.basicConfig(format=FORMAT) 
_LOG = logging.getLogger(__name__) 
_LOG.setLevel(logging.DEBUG) 
sysLogServer = "127.0.0.1" # This could be a remote server address also 
sysLogPort = 514 
sysLogHandle = logging.handlers.SysLogHandler(address=(sysLogServer, sysLogPort)) 
sysLogHandle.setFormatter(logging.Formatter(__name__ + ":" + FORMAT)) 
_LOG.addHandler(sysLogHandle) 

當你想生成您可以使用安裝日誌功能如下日誌消息比:

_LOG.debug("Total Bytes Transfered...") 

這應當引起你的代碼來生成UDP的Syslog報文。下一步將是建立一個本地系統日誌監聽器。例如,可以找到一個基本指南here

注意。上面的例子比格式化要複雜得多,這只是我用來在我的內容輸出中包含函數名稱的典型格式。

+0

我想我在這裏得到你所說的,我正在研究它,但最重要的是,我最初的想法是獲得某種即時警報(也許閃爍的文字等)作爲警報的一種形式。你認爲這可以在終端上實現嗎?我相信,如果沒有用戶登錄,將不可能。但是如果我登錄? – Fenomatik