snakemake报positional argument follows keyword argument错误排查
报错原因与修复方案
核心错误根因
你收到的语法错误完全来自rule prokka的output段定义不符合Python语法规范:Python要求所有位置参数必须放在关键字参数之前,你在output里第一个子项用了关键字命名faa = xxx,第二个子项直接写directory(xxx)没有加关键字,就触发了「位置参数跟在关键字参数后」的语法报错。
其他隐含错误
除了直接的语法错误,你的rule prokka还有三处隐含逻辑错误:
- output段第二个目录路径的通配符多写了一个闭合大括号:
{sample_id}}多了一个},会导致通配符识别失败 - shell命令中
--outdir参数直接传了{output},会把所有输出项(包括faa蛋白文件)都传给路径参数,实际只需要传入输出目录即可 - shell命令中错误使用了
{params.contigs},但你没有定义params.contigs,应该调用输入文件{input.contigs}
修正后的完整rule prokka代码
rule prokka: output: faa = "{sample_id}/annotation/prokka/{sample_id}.faa", outdir = directory("{sample_id}/annotation/prokka/{sample_id}") input: contigs = rules.skesa.output.contigs shell: "prokka --outdir {output.outdir} --prefix {wildcards.sample_id} {input.contigs}"
验证方法
修改后重新执行snakemake -np即可正常通过语法检查。
内容的提问来源于stack exchange,提问作者Forrest Vigor
相关产品推荐
相关产品推荐

