Search code examples
pythonsnakemake

Prevent snakemake from making output directory


Is there a way to prevent snakemake from making a directory for output that doesn't exist yet?

fimo from the MEME suite annoyingly fails at the end of a run if the directory already exists.

My workaround is to give fimo a different directory to output than the one I specify in output but was wondering if there is a more straightforward/elegant solution.

Example given:

    rule generate_scan:
        output:
            PROJECT_BASE + '/results/fimo_scan/fimo.txt'
        params:
            genome = '/home/hjp/ImmuneProject/hg19_reference/hg19.fa',
            motif_database = PROJECT_BASE + '/motif_databases/HUMAN/HOCOMOCOv10_HUMAN_mono_meme_format.meme',
            tmp = 'results/tmp_fimo'
        shell:
            '/home/hjp/meme/bin/fimo'
            ' -o {params.tmp}'
            ' --motif GATA2_HUMAN.H10MO.A'
            ' {params.motif_database}'
            ' {params.genome}'
            ' && '
            'mv {params.tmp}/* {PROJECT_BASE}/results/fimo_scan/'
            ' && '
            'rm -rf {params.tmp}'

Thanks in advance!


Solution

  • Currently, you can't prevent this directly in Snakemake (most tools will rather complain the other way round). However, I'd just prepend the actual invocation of fimo with an rm -r on the output directory.