【发布时间】:2017-10-04 15:56:29
【问题描述】:
以下snakemake脚本:
rule all:
input:
'test.done'
rule pipe:
output:
'test.done'
shell:
"""
seq 1 10000 | head > test.done
"""
失败并出现以下错误:
snakemake -s test.snake
Provided cores: 1
Rules claiming more threads will be scaled down.
Job counts:
count jobs
1 all
1 pipe
2
rule pipe:
output: test.done
jobid: 1
Error in job pipe while creating output file test.done.
RuleException:
CalledProcessError in line 9 of /Users/db291g/Tritume/test.snake:
Command '
seq 1 10000 | head > test.done
' returned non-zero exit status 141.
File "/Users/db291g/Tritume/test.snake", line 9, in __rule_pipe
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/concurrent/futures/thread.py", line 55, in run
Removing output files of failed job pipe since they might be corrupted:
test.done
Will exit after finishing currently running jobs.
Exiting because a job execution failed. Look above for error message
returned non-zero exit status 141的解释似乎是说snakemake已经捕获了head发送的SIGPIPE失败。我想严格来说,snakemake 在捕捉失败方面做的是正确的事情,但我想知道是否有可能忽略像这样的某些类型的错误。我有一个使用head 命令的snakemake 脚本,我正在尝试找到解决此错误的方法。
【问题讨论】:
-
是的,Snakemake 默认设置 pipefail,因为在大多数情况下这是人们隐含的期望。您始终可以通过在 shell 命令前添加
set +o pipefail;来为特定命令停用它。 -
谢谢!如果您将其发布为答案,我会接受。