Thread.py错误snakemake
我想运行一个简单的规则snakemake文件如下:Thread.py错误snakemake
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中。我无法弄清楚这是如何与thread.py相关的。任何人都有这个错误的经验?
当shell命令失败时,它的退出状态不为0. 这就是“返回的非零退出状态2”表示的内容。
您的一个shell命令失败,并且失败传播到snakemake。我猜想snakemake使用线程,并且失败在threads.py
文件中的某些代码的级别上显现。
# 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,但奇怪的是,使用此选项时退出状态仍为非零。
根据约翰内斯·科斯特,snakemake作者:
对不起,误导thread.py的事情,这只是其中snakemake检测出问题的地方。真正的问题是你的命令退出时退出代码2,这表明一个错误与Snakemake无关
error_exit函数不会对此代码的输出做任何更改。它在哪里写出失败的报告?它不在snakefile所在的同一目录中。 – user3015703
'error_exit'函数在其后面的某个步骤失败时启用显示有用的错误消息,并退出shell而不尝试执行下一步。该错误消息应该与snakemake显示的其他内容一起出现,但它不会转到文件。 – bli
其实问题是与链接,改变这个代码工作的链接就好了 – user3015703
要调试这个,我建议你把它添加到你的snakefile中:http://paste.ubuntu.com/24898100/ 然后你可以追加'|| error_exit“一些错误信息”给每个单独的shell命令,以便知道在哪一步发生了故障。 – bli
似乎它是gunzip命令失败。不明白为什么。它会引发警告“gzip:human_g1k_v37.fasta.gz:解压缩正常,忽略尾随垃圾”。但是,gunzip在Snakemake以外的命令行中工作正常。 – rioualen
@rioulaen我得到同样的错误。 gunzip在snakemake外工作很好,但从snakemake跑步时抛出错误是很奇怪的! – user3015703