我正在尝试采用一种简单的方法来在一个规则中创建工作流程所需的所有子目录。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
Run Code Online (Sandbox Code Playgroud)
以下是有问题的规则:
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}"
Run Code Online (Sandbox Code Playgroud)
我尝试使用该directory()函数来查看是否有助于解决该错误,但没有。不知道在这里还能做什么。我不能包含mkdir其中,vcf_split1_23因为这是一项并行工作,制定一条成功创建目录一次但错误创建目录 22 次的规则是很糟糕的形式。我当然想mkdir_vcf在其他规则之前运行。
我看到三个选择;
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}"
Run Code Online (Sandbox Code Playgroud)