我的代码如下:
rule my_rule:
input:
in_one = rules.some_rule_one.output,
in_two = rules.some_rule_two.output,
output: some_output
run:
with open(input.in_one, 'rt') as f:
## do_something
当我运行它时,出现以下错误:
RuleException:
TypeError in line ## of myfile.smk:
expected str, bytes or os.PathLike object, not set
我应该如何输入输入文件名?
显然,解决方案是使用rules.some_rule_one.output[0]
和rules.some_rule_two.output[0]
。
但是,如果命名了some_rule
的输出,则可以按原样使用它们。
rule some_rule_one:
input: 'some_input_one'
output: 'some_output_one'
shell: ...
rule some_rule_two:
input: 'some_input_two'
output:
foo = 'some_output_two'
shell: ...
rule my_rule:
input:
in_one = rules.some_rule_one.output[0],
in_two = rules.some_rule_two.output.foo,
output: some_output
run:
with open(input.in_one, 'rt') as f:
## do_something
[也许只是为了使事情有趣,当my_rule
使用shell:
而不是run:
时,这不是问题,即rules.some_rule_one.output
在shell:
时可以正常工作