Snakemake: RuntimeError pilha traço ausentes ao utilizar Python fileConfig ()

votos
0

Eu tenho um snakefile com uma regra que importa um script Python local e, em seguida, levanta uma RuntimeError. Quando eu executar o snakefile, o rastreamento de pilha para o RuntimeErrornão é mostrado. O código e saída snakemake são mostrados abaixo.

// test.snakefile
rule test_rule:
    run:
        from test import hello
        print(hello)
        raise RuntimeError('raising error')
// test.py
import logging
import os
from logging.config import fileConfig

log_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logging_config.ini')
fileConfig(log_file_path)

hello = 'hello'

saída snakemake:

...
[Mon Jan 13 14:45:54 2020]
rule test_rule:
    jobid: 0

Job counts:
    count   jobs
    1   test_rule
    1
hello
Shutting down, this might take some time.
Exiting because a job execution failed. Look above for error message

No entanto, se eu comente a linha fileConfig(log_file_path)em test.pye snakemake executado, o RuntimeError pilha de rastreamento é impresso como esperado:

Error in rule test_rule:
    jobid: 0

RuleException:
RuntimeError in line 5 of /my-dir/test.snakefile:
raising error
  File /my-dir/test.snakefile, line 5, in __rule_test_rule
  File /usr/lib/python3.6/concurrent/futures/thread.py, line 56, in run
Exiting because a job execution failed. Look above for error message

Alguém sabe por que isso ocorre?

Publicado 14/01/2020 em 00:02
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Esta questão tem a ver com a forma como loggingmódulo foi definido em test.pye como eles foram importados em Snakefile. Seguinte configuração deve funcionar. Por favor, note comenta bloco de código dentro para descrição de modificações.

test.py

import logging
import os
from logging.config import fileConfig

fileConfig('logging_config.ini')
logger = logging.getLogger(__name__)   # assigns to "logger", through which logs are passed. 
logger.info('test.py debug msg')   # example log message

hello = 'yo yo yo'

Snakefile

rule test_rule:
    run:
        from test import hello, logger.   # imports both hello and logger
        print(hello)
        print (logger)

        logger.exception("Exception occurred")   # error log that would capture stack traces, if any. No stack trace in this example.
        raise SystemExit(1)     # exits with non-zero error

logging_config.ini - o mesmo que postou perguntas.

Nesta configuração, variável helloe classe loggerse importado em regra test_rule, e sua saída de log é gravado em arquivo /tmp/experiments.log, conforme configurado no logging_config.ini.

Respondeu 23/01/2020 em 07:26
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more