我有一个输入文件,每一行对应一个序列,我需要对这些序列中的每一个进行多次检查(已经使用python脚本进行了检查,具有多个功能)。这些检查(功能)中的某些互不依赖,可以同时运行。所以我虽然要使用Snakemake。
问题是,大多数示例使用了如此多的输入文件,而我只有一个文件,但是需要在文件的每一行上运行不同的shell。有人想出了什么主意/例子吗?
我的第二个问题是,我的python脚本中的某些函数不会打印出文件,而只是返回一些内容。虽然我已经看到大多数类似蛇的示例都有输出(它是一个文件)。如何在Snakemake工作流程中处理这些功能?我的意思是如何在不同的函数/规则/ ...之间传递参数?我希望我的要求很清楚。谢谢
我确实在网上浏览了教程和一些示例
我的python脚本如下:
def function1(arg1,arg2): ... 返回列表
def function2(arg1,arg2): .... [写文件]
def function3(arg1,arg2): ... print('blah blah')
def main(): 函数1(A,B) 函数2(A,B) function3(A,B)
如果 name == main: main()
我没有错误消息。但是,不知道如何将具有众多功能的脚本转换为Snakemake工作流程。
答案 0 :(得分:1)
如果您提供了一个创建文件的系统(您可以简单地将函数的结果打印到文件中),则可以为函数定义单独的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)
请注意,这不会并行处理输入文件的行。