尝试为工作流创建目录时出现ChildIOException [Snakemake]

时间:2019-09-06 20:28:10

标签: snakemake

我正在尝试以一种简单的方法在一条规则中创建工作流所需的所有子目录。但是,每当我尝试执行在工作流顶部创建所有必需目录的规则时,我就会发现ChildIOException对我来说毫无意义:

Building DAG of jobs...
ChildIOException:
File/directory is a child to another output:
/scratch/groups/xxx/xxx/neand_sQTL/filtered_vcf
/scratch/groups/xxx/xxx/neand_sQTL/filtered_vcf/merged_filtered_chr1.vcf.gz

以下是有问题的规则:

rule mkdir_vcf:
    output:
        directory("gtex_vcf/"),
        directory("kg_vcf/"),
        directory("merged/"),
        directory("filtered_vcf/"),
        touch(".mkdir.chkpnt")
    shell:
        "mkdir -p {output}"

rule vcf_split1_23:
    input:
        vcf=config["vcf"],
        chk=".mkdir.chkpnt"
    output:
        "gtex_vcf/gtex_chr{i}.vcf"
    threads:
        23
    shell:
        "tabix -h {input.vcf} chr{wildcards.i} > {output}"

我尝试使用directory()函数来查看是否可以解决该错误,但没有帮助。不知道这里还有什么。我不能在mkdir中包含vcf_split1_23,因为这是一项并行工作,制定一条成功地一次错误地创建目录22次的规则将是一种不好的形式。我肯定希望mkdir_vcf在其余规则之前运行。

1 个答案:

答案 0 :(得分:1)

我看到三个选择;

  • 只需执行mkdir -p规则中的vcf_split1_23。 (当目录已经存在时,这不会失败)。
  • 在任何规则之外使用python创建目录;例如os.mkdir("filtered_vcf")
  • 不要指定要作为输出的目录,而是将它们指定为params:
    rule mkdir_vcf:
        output:
            touch(".mkdir.chkpnt")
        params:
            "gtex_vcf/",
            "kg_vcf/",
            "merged/",
            "filtered_vcf/"
        shell:
            "mkdir -p {output} {params}"