因此,当我在我的snakemake管道中运行flye之后,运行其他程序时,我会遇到一个问题。这是因为flye的输出是一个目录。我的规则如下:
samples, = glob_wildcards("data/samples/{sample}.fastq")
rule all:
input:
[f"assembled/" for sample in samples],
[f"nanopolish/draft.fa" for sample in samples],
[f"nanopolish/reads.sorted.bam" for sample in samples],
[f"nanopolish/reads.indexed.sorted.bam" for sample in samples]
rule fly:
input:
"unzipped/read.fastq"
output:
directory("assembled/")
conda:
"envs/flye.yaml"
shell:
"flye --nano-corr {input} --genome-size 5m --out-dir {output}"
rule bwa:
input:
"assembled/assembly.fasta"
output:
"nanopolish/draft.fa"
conda:
"nanopolish.yaml"
shell:
"bwa index {input} {output}"
rule nanopolish:
input:
"nanopolish/draft.fa",
"zipped/zipped.gz"
output:
"nanopolish/reads.sorted.bam"
conda:
"nanopolish.yaml"
shell:
"bwa mem -x ont2d -t 8 {input} | samtools sort -o {output}"在此之前有几个步骤,但它们工作得很好。当我运行这个程序时,它会出现以下错误:
ChildIOException:
File/directory is a child to another output:
/home/fronglesquad/snakemake_poging_1/assembled
/home/fronglesquad/snakemake_poging_1/assembled/assembly.fasta我搜索了这个错误。我在那里所能发现的是,这是因为snakemake不能很好地与输出主管一起工作。但是这个工具需要一个输出目录才能工作。有人知道怎么绕过这个吗?
发布于 2019-11-11 21:08:24
(我想)问题就在你的代码的其他地方。
您已经定义了两个规则,第一个规则输出目录assembled,第二个规则输出assembled/assembly.fasta。因为第二个规则的输出总是至少是目录assembled,所以Snakemake抱怨道。您可以通过使用目录作为输入来解决这个问题:
rule second:
input:
"assembled"
output:
...
shell:
cat {input}/assembly.fasta > {output}https://stackoverflow.com/questions/58808354
复制相似问题