首页 > 解决方案 > shell: 和 run: 都可以在一个规则中使用吗?

问题描述

我相当肯定标题的答案是“不”。但是,我想要一些建议,因为我无法优雅地解决这个看似简单的问题。这是我想在一个在 Linux 和 Windows中未经修改的规则中做的事情:

  1. 运行一个 shell 命令,该命令会生成某个目录作为其输出的一部分。shell 命令的名称在 Linux 和 Windows 中是相同的,所以它在两个地方都可以正常工作。
  2. 使用 pathlib 或其他一些 Python 模块重命名目录,以便它在 Linux 和 Windows 中透明地工作。

而已!

这是我已经想出的,我不想做的,因为它们看起来很笨重:

  1. 运行可执行文件并在 shell 中进行重命名。为此,我需要根据我所在的平台制作自定义命令行。(Linux 'mv' 与 Windows 'rename')哎呀。
  2. 制定另一个自动运行的规则,并在此规则之后进行重命名。这有点好,但似乎仍然不“正确”。

我敢打赌有一个优雅的解决方案,但它是什么?

标签: snakemake

解决方案


是的。根据用例的不同,有两种方法可以在 shell 中执行命令:

  • 规则中的shell:一行。不能与其他 Python 代码结合使用。
  • shell()可与规则run:行中的其他 Python 代码一起使用的命令

推荐阅读