Python snakemake扩展没有输入文件
我有一些不同的配置,我需要将它们结合起来运行python脚本Python snakemake扩展没有输入文件,python,workflow,snakemake,Python,Workflow,Snakemake,我有一些不同的配置,我需要将它们结合起来运行python脚本 versions=['lg',sm'] 开始时间=['0','1'] 结束时间=['2'] 我想让snakemake帮我做这件事: python my_script.py -v lg -s 0 -e 2 > lg_0_2.out python my_script.py -v lg -s 1 -e 2 > lg_1_2.out python my_script.py -v sm -s 0 -e 2 > sm_0_2.
versions=['lg',sm']
开始时间=['0','1']
结束时间=['2']
我想让snakemake帮我做这件事:
python my_script.py -v lg -s 0 -e 2 > lg_0_2.out
python my_script.py -v lg -s 1 -e 2 > lg_1_2.out
python my_script.py -v sm -s 0 -e 2 > sm_0_2.out
python my_script.py -v sm -s 1 -e 2 > sm_1_2.out
但我似乎不知道如何在snakemake中做到这一点。有什么想法吗?Snakemake有一种通过外部产品进行扩展的缩写,这就是您描述的操作。通常,这可以通过在第一条规则(默认规则)中生成输出文件字符串作为输入
,然后提供一条规则(myrule
),解析这些字符串以生成用于生成输出的命令来实现。在代码中,它将类似于
蛇形文件
versions=['lg',sm']
开始时间=['0','1']
结束时间=['2']
规则所有:
输入:
展开(“{version}{start}{end}.out”,
版本=版本,开始=开始时间,结束=结束时间)
规则我的规则:
输出:“{version,[^.]+}{start,[0-9]+}{end,[0-9]+}.out”
外壳:
"""
python my_script.py-v{wildcards.version}-s{wildcards.start}-e{wildcards.end}>{output}
"""
在该snakemake
文件所在的目录中运行snakemake
,将生成所需的文件。snakemake具有通过外部产品进行扩展的缩写,这就是您描述的操作。通常,这可以通过在第一条规则(默认规则)中生成输出文件字符串作为输入
,然后提供一条规则(myrule
),解析这些字符串以生成用于生成输出的命令来实现。在代码中,它将类似于
蛇形文件
versions=['lg',sm']
开始时间=['0','1']
结束时间=['2']
规则所有:
输入:
展开(“{version}{start}{end}.out”,
版本=版本,开始=开始时间,结束=结束时间)
规则我的规则:
输出:“{version,[^.]+}{start,[0-9]+}{end,[0-9]+}.out”
外壳:
"""
python my_script.py-v{wildcards.version}-s{wildcards.start}-e{wildcards.end}>{output}
"""
在这个
Snakefile
所在的目录中运行snakemake
,将生成所需的文件。@merv我明白了。很高兴知道。我明白了。@merv。很高兴知道。然后重新打开。这可以工作,但在我的版本中,我需要将规则中的部分全部
作为输入
,并且我的shell命令作为一个简单的字符串。然而,我有一个问题,为什么它需要在两个不同的规则中?为什么我不能把all
规则中的内容作为my_规则的输出
?两者都有似乎是多余的,但当我尝试这样做时,snakemake无法识别通配符
对象的部分。@jsad对此表示抱歉,我是从内存中执行的,忘记了输入:
。Snakemake有时被描述为一种基于拉力的机制。它要么从命令行(您请求snakemake{lg,sm}{0,1}{u 2.out
)获取所需输出的列表,要么从第一条规则的输入获取所需输出的列表(在这种情况下,只需运行snakemake
)。然后使用规则的输出匹配(并解析)接收到的文件字符串。在标准管道中,您通常会有许多规则,只需列出与其他内容无关的最终输出。感谢@merv的解释和有用的答案!这是可行的,但在我的版本中,我需要将rule all
中的部分作为输入
,并将shell命令作为简单字符串。然而,我有一个问题,为什么它需要在两个不同的规则中?为什么我不能把all
规则中的内容作为my_规则的输出
?两者都有似乎是多余的,但当我尝试这样做时,snakemake无法识别通配符
对象的部分。@jsad对此表示抱歉,我是从内存中执行的,忘记了输入:
。Snakemake有时被描述为一种基于拉力的机制。它要么从命令行(您请求snakemake{lg,sm}{0,1}{u 2.out
)获取所需输出的列表,要么从第一条规则的输入获取所需输出的列表(在这种情况下,只需运行snakemake
)。然后使用规则的输出匹配(并解析)接收到的文件字符串。在标准管道中,您通常会有许多规则,只需列出与其他内容无关的最终输出。感谢@merv的解释和有用的答案!