Snakemake: RuntimeError stacktracering ontbreekt bij gebruik Python fileConfig ()

stemmen
0

Ik heb een snakefile met één regel die een lokale Python-script Importeren en dan roept een RuntimeError. Wanneer ik snakefile draaien, de stack trace de RuntimeErrorniet getoond. De code en snakemake output hieronder getoond.

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

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

Echter, als ik commentaar van de regel fileConfig(log_file_path)in test.pyen uit te voeren snakemake, de RuntimeError stack trace wordt afgedrukt zoals verwacht:

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

Iedereen weet waarom dit gebeurt?

De vraag is gesteld op 14/01/2020 om 00:02
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Dit probleem heeft te maken met hoe de loggingmodule werd gedefinieerd in test.pyen hoe ze werden ingevoerd Snakefile. Na de setup zou moeten werken. Houd er rekening mee reacties binnen code blok voor de beschrijving van wijzigingen.

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 - zelfde zoals gepubliceerd in vragen.

In deze opstelling, variabele helloen klasse loggerkrijgen geïmporteerd in de regel test_rule, en hun logging uitgang wordt geschreven in het dossier /tmp/experiments.log, zoals geconfigureerd in logging_config.ini.

antwoordde op 23/01/2020 om 07:26
bron van user

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