SRR, = glob_wildcards("output.gtf/"+"{srr}.gtf")
#SRR = ["ERR188401","ERR204916"]
rule all:
input:
#expand("output.gtf/"+"{srr}.gtf",srr=SRR),
"MergedList.txt",

rule gtflist:
input:
gtffiles = expand("output.gtf/"+"{srr}.gtf",srr=SRR)
output:
output_txt = "MergedList.txt"
run:
with open(output.output_txt,'w') as f:
for gtf in input.gtffiles:
print(gtf,file=f)



rule stringtieMerge:
input:
refgtf = "/mnt/shared/scratch/myan/private/practice_data/RNAseq/chrX_data/genes/chrX.gtf",
gtflist = "MergedList.txt"
output:
gtf = "output.merged.gtf/StringtieMerged.gtf"
log:
"output.merged.gtf/StringtieMerge.logs"
threads:
1
params:
"-m 200 -c 3"
shell:
"""
stringtie --merge {params} -p {threads} -G {input.refgtf} -o {output.gtf} {input.gtflist}
"""

第二个rule就是不运行

原来是在rule all 代码里少写了 第二个rule的输出文件

正确写法是

SRR, = glob_wildcards("output.gtf/"+"{srr}.gtf")
#SRR = ["ERR188401","ERR204916"]
rule all:
input:
#expand("output.gtf/"+"{srr}.gtf",srr=SRR),
"MergedList.txt",
"output.merged.gtf/StringtieMerged.gtf"

rule gtflist:
input:
gtffiles = expand("output.gtf/"+"{srr}.gtf",srr=SRR)
output:
output_txt = "MergedList.txt"
run:
with open(output.output_txt,'w') as f:
for gtf in input.gtffiles:
print(gtf,file=f)



rule stringtieMerge:
input:
refgtf = "/mnt/shared/scratch/myan/private/practice_data/RNAseq/chrX_data/genes/chrX.gtf",
gtflist = "MergedList.txt"
output:
gtf = "output.merged.gtf/StringtieMerged.gtf"
log:
"output.merged.gtf/StringtieMerge.logs"
threads:
1
params:
"-m 200 -c 3"
shell:
"""
stringtie --merge {params} -p {threads} -G {input.refgtf} -o {output.gtf} {input.gtflist}
"""

rule all 的作用是啥我还是不懂