将具有多个函数的python脚本转换为SnakeM

2024-05-23 15:09:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个输入文件,每一行对应一个序列,我需要对这些序列中的每一个进行多次检查(已经用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)

如果名称==main: 主()

我没有错误消息。但我不知道如何将我的脚本与这么多的功能转换为蛇形工作流。你知道吗


Tags: 文件函数功能脚本示例maindef序列
1条回答
网友
1楼 · 发布于 2024-05-23 15:09:52

您可以为函数定义单独的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)

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

相关问题 更多 >