Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python snakemake扩展没有输入文件_Python_Workflow_Snakemake - Fatal编程技术网

Python snakemake扩展没有输入文件

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.

我有一些不同的配置,我需要将它们结合起来运行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.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的解释和有用的答案!