我正在尝试以一种简单的方法在一条规则中创建工作流所需的所有子目录。但是,每当我尝试执行在工作流顶部创建所有必需目录的规则时,我就会发现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
在其余规则之前运行。
答案 0 :(得分:1)
我看到三个选择;
mkdir -p
规则中的vcf_split1_23
。 (当目录已经存在时,这不会失败)。os.mkdir("filtered_vcf")
。 rule mkdir_vcf:
output:
touch(".mkdir.chkpnt")
params:
"gtex_vcf/",
"kg_vcf/",
"merged/",
"filtered_vcf/"
shell:
"mkdir -p {output} {params}"