【问题标题】:Thread.py error snakemakeThread.py 错误蛇形
【发布时间】:2017-06-18 14:35:46
【问题描述】:

我正在尝试运行一个简单的单规则蛇形文件,如下所示:

resources_dir='resources'

rule downloadReference:
    output:
        fa = resources_dir+'/human_g1k_v37.fasta',
        fai = resources_dir+'/human_g1k_v37.fasta.fai',
    shell:
        ('mkdir -p '+resources_dir+'; cd '+resources_dir+'; ' +
        'wget ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz; gunzip human_g1k_v37.fasta.gz; ' +
        'wget ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.fai;')

但我得到一个错误:

    Error in job downloadReference while creating output files 
    resources/human_g1k_v37.fasta, resources/human_g1k_v37.fasta.fai.
    RuleException:
    CalledProcessError in line 10 of 
    /lustre4/home/masih/projects/NGS_pipeline/snake_test:
    Command 'mkdir -p resources; cd resources; wget ftp://ftp-
  trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz; gunzip human_g1k_v37.fasta.gz; wget ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.fai;' returned non-zero exit status 2.
      File "/lustre4/home/masih/projects/NGS_pipeline/snake_test", line 10, in __rule_downloadReference
      File "/home/masih/miniconda3/lib/python3.6/concurrent/futures/thread.py", line 55, in run
    Removing output files of failed job downloadReference since they might be corrupted:
    resources/human_g1k_v37.fasta
    Will exit after finishing currently running jobs.
    Exiting because a job execution failed. Look above for error message

我没有在snakemake 中使用threads 选项。我不知道这与thread.py有什么关系。有人遇到过这个错误吗?

【问题讨论】:

  • 要调试它,我建议你将它添加到你的蛇文件中:paste.ubuntu.com/24898100 然后你可以将|| error_exit "some error message" 附加到每个单独的 shell 命令中,以便了解失败发生在哪一步。
  • 似乎是失败的 gunzip 命令。不知道为什么。它会引发警告“gzip:human_g1k_v37.fasta.gz:解压OK,尾随垃圾被忽略”。但是,gunzip 在 Snakemake 之外的命令行中可以正常工作...
  • @rioulaen 我得到了同样的错误。奇怪的是,gunzip 在snakemake 之外工作正常,但在从snakemake 运行时抛出错误!
  • 所以我误认为我的无效cd假设...

标签: python-3.x gzip snakemake


【解决方案1】:

当一个 shell 命令失败时,它的退出状态不是 0。 这就是“返回非零退出状态 2”的含义。

你的一个 shell 命令失败了,这个失败被传播到了snakemake。我想snakemake 使用线程,并且失败在threads.py 文件中的某些代码级别表现出来1

为了更好地理解发生了什么,我们可以使用|| 运算符捕获第一个错误,然后是一个发出错误消息的函数:

# Define functions to be used in shell portions
shell.prefix("""
# http://linuxcommand.org/wss0150.php
PROGNAME=$(basename $0)

function error_exit
{{
#   ----------------------------------------------------------------
#   Function for exit due to fatal program error
#       Accepts 1 argument:
#           string containing descriptive error message
#   ----------------------------------------------------------------
    echo "${{PROGNAME}}: ${{1:-"Unknown Error"}}" 1>&2
    exit 1
}}
""")

resources_dir='resources'

rule downloadReference:
    output:
        fa = resources_dir+'/human_g1k_v37.fasta',
        fai = resources_dir+'/human_g1k_v37.fasta.fai',
    params:
        resources_dir = resources_dir
    shell:
        """
        mkdir -p {params.resources_dir}
        cd {params.resources_dir}
        wget ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz || error_exit "fasta download failed"
        gunzip human_g1k_v37.fasta.gz || error_exit "fasta gunzip failed"
        wget ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.fai || error_exit "fai download failed"
        """

当我运行它时,我在第一次下载的消息之后收到以下消息:

gzip: human_g1k_v37.fasta.gz: decompression OK, trailing garbage ignored
bash: fasta gunzip failed

事实证明,gzip 在出现警告时使用非零退出代码:

退出状态通常为0;如果发生错误,退出状态为 1。如果出现警告,退出状态为 2。

(来自man gzip 的诊断部分)

如果我删除错误捕获|| error_exit "fasta gunzip failed",则工作流程能够完成。所以我不明白你为什么首先会出现这个错误。

我很惊讶gzip 作者决定使用非零状态以防出现简单警告。他们添加了-q 选项来关闭this specific warning, due to the presence of trailing zeroes,但奇怪的是,使用此选项时退出状态仍然非零。


1 根据蛇形的作者 Johannes Köster 所说:

对不起,误导 thread.py 的东西,这只是 snakemake 检测问题的地方。真正的问题是您的命令以退出代码 2 退出,这表明与 Snakemake 无关的错误

【讨论】:

  • error_exit 函数不会对此代码的输出进行任何更改。它在哪里写失败报告?它不在蛇文件所在的同一目录中。
  • error_exit 函数可以在其后面的某个步骤失败时显示有用的错误消息,并退出 shell 而不尝试执行后续步骤。错误消息应该与 snakemake 显示的其他内容一起出现,但它不会进入文件。
  • 实际上问题出在链接上,更改链接这段代码就可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-06
  • 2018-08-24
相关资源
最近更新 更多