擅长:python、mysql、java
<p>你可以试着做以下事情</p>
<pre><code>onsuccess:
for rulename in dir(rules):
the_rule = getattr(rules, rulename)
if hasattr(the_rule, "log"):
print(rulename, ":\t", getattr(the_rule, "log"))
</code></pre>
<p>在<code>onerror</code>中也类似。在</p>
<p>如果您的规则的日志文件中有一些通配符,那么可以将它放在展开中,以生成真实的日志文件名。在</p>
<p>我刚测试过这个:</p>
^{pr2}$
<p>最后得到如下输出:</p>
<pre><code>all : []
combine_text : []
generate_text : ['text_A_1.log', 'text_B_1.log', 'text_A_2.log', 'text_B_2.log']
</code></pre>
<p>问题是,这会显示所有可能由snakefile生成的日志文件,而不是在特定运行中实际生成的日志文件(例如,如果这次不需要执行某些规则)。在</p>
<h3>编辑:另一种扩展日志文件名的方法</h3>
<p>为了适应实际生成的日志文件,<code>onsuccess</code>(或<code>onerror</code>)可以采用不同的方式:</p>
<pre><code>import glob
onsuccess:
for rulename in dir(rules):
the_rule = getattr(rules, rulename)
if hasattr(the_rule, "log"):
print(rulename, ":\t", *[glob.glob(pattern) for pattern in expand(getattr(the_rule, "log"), letter=['*'], num=['*'])])
</code></pre>
<p>通过这个修改,我几乎获得了相同的文件名列表。唯一不同的是它们出现的顺序。在</p>