簡體   English   中英

管道python將stdout流輸出到grep

[英]pipe python logging stdout stream output to grep

我知道這一段時間的原因,但我已經忘記了,5分鍾的谷歌搜索沒有透露答案。

我寫了一個python腳本,它有兩個處理程序。 一個用於文件,一個用於流。

一切都按我的意願運作。

現在,我想快速grep輸出正在打印到終端的輸出,但通過grep管道腳本的輸出似乎不起作用,所有輸出仍然打印到終端。

我使用的是unix和python 2.7

這可能是一個重復的問題,但我找不到答案。

這是我的日志模塊設置:

def setup_logger(verbosity):
    #logger = logging.getLogger(regress.app_name)
    logger = logging.getLogger('components')
    logger.setLevel(logging.DEBUG)
    # create file handler which logs even debug messages
    fh = logging.FileHandler(Config.logging_file_name, mode='w')
    fh.setLevel(logging.DEBUG)
    # create console handler with a higher log level
    ch = logging.StreamHandler()
    ch.setLevel({True:logging.DEBUG, False:logging.INFO}[verbosity])
    # create formatter and add it to the handlers
    file_formatter = logging.Formatter('%(asctime)s - %(pathname)s - %(funcName)s - %(name)s - %(levelname)s - %(lineno)s - %(message)s')

    console_formatter = logging.Formatter('%(filename)s - %(lineno)s - %(levelname)s - %(message)s')
    fh.setFormatter(file_formatter)
    ch.setFormatter(console_formatter)
    # add the handlers to the logger
    logger.addHandler(fh)
    logger.addHandler(ch)

    #logging.abort = abort
    #logging.abort("testing...")
    #logger.info("does this happen?")

    #logging.func = func
    #logging.func()
    #logger.func()

我對腳本的調用如下所示:

<script_name> <script args> | grep -i <search_string>

正如@Blender在原始問題下面的評論中提到的,你只需要重定向stderr。 您可以通過在管道之前添加2>&1重定向來完成此操作。 所以,例如,

python main.py 2>&1 | grep INFO

將過濾main.py記錄的任何INFO行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM