Snakemake: RuntimeError stack trace chybí při použití Python fileConfig ()

hlasů
0

Mám snakefile s jedním pravidlem, který dováží místní Python skript a pak vyvolává RuntimeError. Když spustím snakefile, trasování zásobníku pro RuntimeErrornení zobrazen. Kód a snakemake výstupu jsou uvedeny níže.

// 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 výkon:

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

Nicméně, když jsem komentář mimo řádek fileConfig(log_file_path)v test.pya spustit snakemake, na RuntimeError trasování zásobníku se vytiskne podle očekávání:

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

Každý, kdo ví, proč se to stane?

Položena 13/01/2020 v 22:02
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Tento problém má co do činění s tím, jak loggingse modul uvedený v test.pya jak byly dovezeny v Snakefile. Následující nastavení by mělo fungovat. Vezměte prosím na vědomí připomínky uvnitř bloku kódu pro popis úprav.

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 - stejně jako publikoval v otázkách.

V tomto nastavení, variabilní helloa třída loggerdostat dovezené do vlády test_rule, a jejich těžba výstup dostane zapsat do souboru /tmp/experiments.log, jak je nakonfigurován logging_config.ini.

Odpovězeno 23/01/2020 v 05:26
zdroj uživatelem

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