snakemake中的动态输出

时间:2017-06-29 01:16:48

标签: python snakemake

我正在使用snakemake来开发管道。我正在尝试为目标中的每个文件创建符号链接到新目标。我不知道会有多少文件,所以我正在尝试使用动态输出。

rule source:
    output: dynamic('{n}.txt')
    run:
        source_dir = config["windows"]
        source = os.listdir(source_dir)
        for w in source:
            shell("ln -s %s/%s source/%s" % (source_dir, w, w))

这是我得到的错误:

  

WorkflowError:   “目标规则可能不包含通配符。请指定具体文件或没有通配符的规则。”

问题是什么?

1 个答案:

答案 0 :(得分:5)

对于使用动态功能,您必须得到另一条规则,其中输入是动态文件,如下所示:

rule target :
  input : dynamic('{n}.txt')

rule source:
  output: dynamic('{n}.txt')
  run:
    source_dir = config["windows"]
    source = os.listdir(source_dir)
    for w in source:
      shell("ln -s %s/%s source/%s" % (source_dir, w, w))

像这样,Snakemake会知道通配符的属性。

使用通配符时提示您始终需要定义它。在目标规则的输入中调用dynamic将定义通配符' {n}'