Snakemake: RuntimeError Seguimiento de la pila falta cuando se utiliza Python fileConfig ()

votos
0

Tengo un snakefile con una regla que importa un script local Python y luego plantea una RuntimeError. Cuando ejecuto el snakefile, el seguimiento de la pila para el RuntimeErrorque no se muestra. El código y la salida snakemake se muestran a continuación.

// 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'

snakemake de salida:

...
[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

Sin embargo, si comento hacia fuera de la línea fileConfig(log_file_path)en test.pyy snakemake correr, la RuntimeError Seguimiento de la pila se imprime como se esperaba:

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

Alguien sabe por qué ocurre esto?

Publicado el 13/01/2020 a las 22:02
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Este problema tiene que ver con cómo loggingse definió en el módulo test.pyy la forma en que fueron importados en Snakefile. Tras la instalación debería funcionar. Tenga en cuenta comenta bloque de código dentro de la descripción de las modificaciones.

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 - mismo que ha escrito en preguntas.

En esta configuración, variables helloy la clase loggerse importan en regla test_rule, y su salida de registro se escribe en el archivo /tmp/experiments.log, como se ha configurado en logging_config.ini.

Respondida el 23/01/2020 a las 05:26
fuente por usuario

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