Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用os.system和snakemake.shell的区别_Python_Snakemake - Fatal编程技术网

Python 使用os.system和snakemake.shell的区别

Python 使用os.system和snakemake.shell的区别,python,snakemake,Python,Snakemake,我对snakemake还相当陌生,所以我仍然难以将shell命令和python代码结合起来 我的解决方案是生成脚本文件,然后在此脚本中执行shell命令 在执行命令行的envokingsnakemake.shell和os.system之间是否存在机械上的差异 例如: sample = ["SRR12845350"] rule prefetch: input: "results/Metadata/{sample}.json" output:

我对snakemake还相当陌生,所以我仍然难以将shell命令和python代码结合起来

我的解决方案是生成脚本文件,然后在此脚本中执行shell命令

在执行命令行的envoking
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

shell
只是一个帮助函数,可以更轻松地从snakemake调用命令行参数。学习snakemake可能会让人不知所措,学习Python的
os.system
子流程的精细复杂性也会让人感到不必要的复杂。snakemake
shell
命令执行一些健全性检查,设置一些环境变量,例如命令可以使用的线程数和一些其他“小”内容,但只对命令调用
subprocess.Popen
。这两个选项都应该有效,但由于您正在编写snakemake包装器,因此使用shell可能会稍微好一些,因为它是为snakemake设计的。

一些自我宣传:我基于snakemake制作了一个管道,可以从SRA/GEO/ENA/DDBJ为您下载示例。看一看,它可能会做你想做的事情,否则可能会帮助你解决未来的问题:
os.system()
通常不应该在新代码中使用,除非你完全理解它是如何工作的;使用它时很容易无意中产生安全漏洞。通常(没有任何特定于snakemake的内容),
subprocess.Popen
subprocess.run
,等等都应该使用……例如,如果运行
os.system(f“prefetch results/Metadata/{sample}.json-o results/SRA/{sample}.SRA”)
,如果你的代码被传递了一个包含
$(rm-rf~)
@Maarten vd Sande自广告的
示例值,那你的日子会很糟糕-你的工具对于一般的生物信息学分析非常有用-我一定会看看我是否能从中获得一些关于蛇制造设置的灵感,并将此书签以备将来使用@Kasper,这取决于是否使用了
shell=True
。如果它处于关闭状态(默认情况下),将不会处理命令替换,如
$(…)