我正在为snakemake工作流程编写Snakefile。作为工作流程的一部分,我需要检查数据库中的一组记录是否已更改,以及是否已重新下载它们。
我的想法是编写一条规则来检查数据库时间戳并将其写入输出文件。并将时间戳文件用作我的下载规则的输入。问题是一旦写入了时间戳文件,该时间戳规则将永远不会再次运行,因此该时间戳将永远不会更新。
有没有办法使该规则每次运行。(我知道我可以从shell强制使用它,但是我想在Snakefile中指定它)或者,有没有更好的方法来处理这个问题?
小智 5
您在规则或函数定义之外添加到Snakefile中的任何代码都将像常规Python脚本一样在启动时运行,因此您不需要外部shell脚本。您可以直接在Snakefile中用Python实现所需的逻辑,如果需要,可以使用shell()函数。
一个警告是,如果您尝试在集群上运行工作流,则每次提交的每个集群作业都将运行该代码。避免这种情况的一种粗略但有效的方法是通过如下检查来保护它:
if '--nolock' not in sys.argv:
if check_database_for_updates():
os.utime('touch.file')
Run Code Online (Sandbox Code Playgroud)
然后将touch.file设置为从数据库读取的规则的代理输入。那有意义吗?
蒂姆
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |