Snakemake: la trace de RuntimeError manquant lors de l'utilisation python fileConfig ()

voix
0

J'ai un snakefile avec une règle qui importe un script Python local et soulève alors RuntimeError. Quand je lance le snakefile, la trace de la pile pour l' RuntimeErrorest pas représenté. Le code et la sortie snakemake sont présentés ci - dessous.

// 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 sortie:

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

Cependant, si je commente la ligne fileConfig(log_file_path)à test.pyet exécuter snakemake, la trace du RuntimeError est imprimé comme prévu:

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

Quelqu'un sait pourquoi cela se produit?

Créé 13/01/2020 à 22:02
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Cette question a à voir avec la façon dont le loggingmodule a été défini test.pyet la façon dont ils ont été importés dans Snakefile. L' installation devrait fonctionner. S'il vous plaît noter les commentaires bloc de code à l' intérieur pour la description des modifications.

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 - même telle que publiée dans les questions.

Dans cette configuration, la variable helloet la classe loggers'importés en règle test_rule, et leur sortie de l' enregistrement dans le fichier soit écrit /tmp/experiments.log, tel que configuré dans logging_config.ini.

Créé 23/01/2020 à 05:26
source utilisateur

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