python - 将具有多个函数的 python 脚本转换为 SnakeMake 工作流程

标签 python function snakemake

我有一个输入文件,每一行对应一个序列,我需要对每个序列进行多次检查(已经使用 python 脚本、多个函数进行了检查)。其中一些检查(功能)彼此不依赖并且可以同时运行。所以我想使用Snakemake。

问题是,大多数示例使用如此多的输入文件,而我只有一个文件,但需要在文件的每一行上运行不同的 shell。有人想出任何想法/例子吗?

我的第二个问题是,我的Python脚本中的一些函数不打印文件,而只是返回一些东西。虽然我见过大多数蛇形示例都有输出(这是一个文件)。我该如何处理 Snakemake 工作流程中的这些功能?我的意思是如何在不同的函数/规则/...等之间传递参数?我希望我的要求很清楚。谢谢

我确实在线浏览了教程和一些示例

我的 python 脚本如下所示:

def 函数1(arg1, arg2): ... 返回列表

def 函数2(arg1, arg2): .... [写入文件]

def 函数3(arg1, arg2): ... 打印('废话')

定义主函数(): 函数1(A,B) 函数2(A,B) 函数3(A,B)

如果名称== main: main()

我没有任何错误消息。但不知道如何将我的具有如此多功能的脚本转换为 Snakemake 工作流程。

最佳答案

如果您想出一个创建文件的系统(可能只是将函数的结果打印到文件中),您也许可以为您的函数定义单独的snakemake规则。事实上,snakemake 根据它必须生成的文件来决定运行哪个规则。

这样,相互不依赖的规则将能够并行运行。

from contextlib import redirect_stdout

def function1(arg1, arg2):
    # ...

def function2(arg1, arg2):
    # ...

def function3(arg1, arg2):
    # ...

A = ...
B = ...

rule all:
    input:
        "function1_result.txt",
        "function2_result.txt"
        "function3_result.txt"

rule run_function1:
    output:
        "function1_result.txt",
    run:
        l = function1(A, B)
        with open(input[0]) as fh:
            print(*l, sep="\n", file=fh)

rule run_function2:
    output:
        "function2_result.txt",
    run:
        # Assuming this writes "function2_result.txt":
        function2(A, B)

rule run_function3:
    output:
        "function3_result.txt",
    run:
        with open(input[0]) as fh:
            # see https://stackoverflow.com/a/55833804/1878788
            with redirect_stdout(fh):
                function3(A, B)

请注意,这不会并行处理输入文件的行。

关于python - 将具有多个函数的 python 脚本转换为 SnakeMake 工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56918619/

相关文章:

python - 在 python 中使用 struct 反序列化来自串行的字节数组

python - 使用函数的结果作为搜索条件

bioinformatics - 如何使用 Snakemake 处理多个输出文件名约定

c - 使用指针时的错误和警告消息

c - 这个 C 函数是如何工作的?

对于声明为本地的规则,snakemake 中未激活 Conda 环境

python - Snakemake,如何为两个独立参数构建循环

python - 使用 pandas 导出 csv 时指定第一列

python - 如何在 QTabWidget 选项卡上设置鼠标光标

python - hdf5 文件到 pandas 数据框