diff --git a/bio/gatk/applybqsrspark/wrapper.py b/bio/gatk/applybqsrspark/wrapper.py index d20eff2625..9c8187f111 100644 --- a/bio/gatk/applybqsrspark/wrapper.py +++ b/bio/gatk/applybqsrspark/wrapper.py @@ -3,6 +3,8 @@ __license__ = "MIT" import tempfile +import random +from pathlib import Path from snakemake.shell import shell from snakemake_wrapper_utils.java import get_java_opts @@ -15,16 +17,18 @@ spark_extra = snakemake.params.get("spark_extra", "") java_opts = get_java_opts(snakemake) -tmpdir = tempfile.gettempdir() - log = snakemake.log_fmt_shell(stdout=True, stderr=True) -shell( - "gatk --java-options '{java_opts}' ApplyBQSRSpark {extra} " - "--reference {snakemake.input.ref} --input {snakemake.input.bam} " - "--bqsr-recal-file {snakemake.input.recal_table} " - "--tmp-dir {tmpdir} " - "--output {snakemake.output.bam} " - "-- --spark-runner {spark_runner} --spark-master {spark_master} {spark_extra} " - "{log}" -) +with tempfile.TemporaryDirectory() as tmpdir: + # This folder must not exist; it is created by GATK + tmpdir_shards = Path(tmpdir) / "shards_{:06d}".format(random.randrange(10 ** 6)) + + shell( + "gatk --java-options '{java_opts}' ApplyBQSRSpark {extra} " + "--reference {snakemake.input.ref} --input {snakemake.input.bam} " + "--bqsr-recal-file {snakemake.input.recal_table} " + "--tmp-dir {tmpdir} --output-shard-tmp-dir {tmpdir_shards} " + "--output {snakemake.output.bam} " + "-- --spark-runner {spark_runner} --spark-master {spark_master} {spark_extra} " + "{log}" + )