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

将具有多个函数的python脚本转换为SnakeMake工作流,python,function,snakemake,Python,Function,Snakemake,我有一个输入文件,每行对应一个序列,我需要对每个序列进行多次检查(已经使用python脚本和多个函数进行了检查)。其中一些检查(函数)彼此不依赖,可以同时运行。所以我想用蛇毒 问题是,大多数示例使用这么多输入文件,我只有一个文件,但需要在文件的每一行上运行不同的shell。有人提出什么想法/例子吗 我的第二个问题是,python脚本中的一些函数不打印文件,只返回一些内容。虽然我见过大多数蛇形的例子都有一个输出(即文件)。如何处理Snakemake工作流中的这些功能?我的意思是如何在不同的函数/规

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

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

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

我在网上浏览了教程和一些例子

我的python脚本如下所示:

def功能1(arg1、arg2): ... 返回列表

def功能2(arg1、arg2): .... [写一个文件]

def功能3(arg1、arg2): ... 打印(‘废话’)

def main(): 职能1(A、B) 职能2(A、B) 职能3(A、B)

如果name==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)

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

谢谢您的建议。最后我做了类似的事情。虽然在这种情况下会有太多的IO,但它完成了任务。非常感谢。