我对snakemake还是个新手,所以我仍然很难将shell命令和python代码结合起来。
我的解决方案是生成脚本文件,然后在此脚本中执行shell命令。
调用snakemake.shell和os.system来执行命令行有什么机械上的区别吗?
示例:
sample = ["SRR12845350"]
rule prefetch:
input:
"results/Metadata/{sample}.json"
output:
"results/SRA/{sample}.sra
params:
"prefetch %s -o %s"
script:
"scripts/prefetch.py"prefetch.py是:
from json import load
from snakemake import shell
from os import system
json_file = snakemake.input[0]
prefetch = snakemake.params[0]
sra_file = snakemake.output[0]
json = load(open(json_file))
sra_run = json["RUN_accession"]
shell(prefetch %(sra_run, sra_file)) # option 1
system(prefetch %(sra_run, sra_file)) # option 2发布于 2020-11-06 01:08:16
shell只是一个辅助函数,它使得从snakemake调用命令行参数变得更容易。学习snakemake可能会让人不知所措,而学习Python的os.system和subprocess的复杂细节是不必要的。snakemake shell命令执行一些健全性检查,设置一些环境变量,例如命令可以使用的线程数和其他一些“小”东西,但under the hood只是对您的命令调用subprocess.Popen。这两个选项都应该有效,但由于您正在编写一个snakemake包装器,所以使用shell可能会稍好一些,因为它是为在snakemake中使用而设计的。
https://stackoverflow.com/questions/64695477
复制相似问题