【发布时间】:2020-04-22 16:23:06
【问题描述】:
我正在使用一些带有snakemake 的python 脚本来自动化工作流程。这些脚本接受命令行参数,虽然我可以用snakemake.input[0]、snakemake.output[0] 等替换它们,但我不愿意这样做,因为我还希望能够在snakemake 之外使用它们。
解决这个问题的一种自然方法——我一直在做的——是将它们作为shell 而不是script 运行。但是,当我这样做时,依赖图被破坏了;我更新了我的脚本,DAG 认为不需要重新运行任何东西。
有没有办法将命令行参数传递给脚本但仍将它们作为脚本运行?
编辑:一个例子
我的python脚本
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-o", type=str)
args = parser.parse_args()
with open(args.o, "w") as file:
file.write("My file output")
我的蛇文件
rule some_rule:
output: "some_file_name.txt"
shell: "python my_script.py -o {output}"
【问题讨论】:
-
我不知道
script会让snakemake 知道脚本的变化(我总是使用shell或shell()调用run)。也许您可以为您的脚本创建一个双重接口,对第一个try进行异常处理,以访问来自snakemake对象的信息,并从except子句中的命令行访问信息。 -
既然您似乎是在开发蛇文件旁边的脚本,您可以将 python 脚本作为输入添加到规则中吗?然后更改 python 脚本的修改时间将触发规则的重新运行。这很 hacky,但你可以在“完成”python 代码开发后将其删除。
标签: snakemake