encaminhar o resultado do 'stdout' em python para o grep

Eu sabia a razão disto há algum tempo, mas já me esqueci e 5 minutos de pesquisa no Google não revelaram a resposta.

escrevi um script em python que tem dois manipuladores. Um para ficheiros e outro para fluxos.

Tudo funciona como eu quiser.

Agora, eu queria rapidamente grep para algo na saída que estava sendo impresso para o terminal, mas piping a saída do script através do grep não parece estar funcionando em que toda a saída ainda começa impresso no terminal.

estou a usar o unix e o python 2.7

Esta é provavelmente uma pergunta duplicada, mas não consigo encontrar a resposta.

Aqui está a minha configuração do módulo de Registo:
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()
A minha invocação do guião parece-se com isto:

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

Author: Gregory Kuhn, 2015-10-30

1 answers

Como @Blender menciona nos comentários abaixo da pergunta original, você só precisa redirecionar o stderr. Você pode fazer isso adicionando um 2>&1 redirecionamento antes do tubo. Então, por exemplo,

python main.py 2>&1 | grep INFO

Irá filtrar todas as linhas INFO registadas por main.py.

 0
Author: Doug Bradshaw, 2018-07-03 17:26:02