由于各种原因,我希望能够在单独的配置文件中定义我的输入。不使用配置文件的当前版本如下:
rule test:
input:
labs = "data/labs.csv"
demo = "data/demo.csv"
output:
"outputs/output.txt"
script:
"programs/myprogram.py"
我希望我的配置文件是这样的:
{
"inputs": {
"labs" : "data/labs.csv",
"demo": "data/demo.csv"
}
}
然后我的蛇形文件是:
rule test:
input:
config["inputs"]
output:
"outputs/output.txt"
script:
"programs/myprogram.py"
然而,我得到一个错误告诉我,我缺少规则的输入文件,并注意到受影响的文件实验室和演示。
我想我可以把它解析成一个也许输入可以理解的列表,但我希望我的输入理想地保留它们的名称。不幸的是,我一点也不清楚如何做到这一点。
yaml
可能是格式化配置的更好选择,因为它更具可读性。假设config.yml
包含:
inputs:
labs: data/labs.csv
demo: data/demo.csv
我们可以用configfile
加载这个yaml
。现在,请确保使用**config["inputs"]
,因为这将扩展字典的内容并将其作为key=value
组合传递:
configfile: "config.yml"
rule test:
input: **config["inputs"]
shell: 'echo {input}'