|
发表于 2021-12-27 17:34:32
|
查看: 1720 |
回复: 1
本帖最后由 生信喵 于 2021-12-27 17:38 编辑
背景
在生物信息分析过程中常常会越到各种错误,包括软件错误,文件错误,系统错误等,这些错误需要处理,否则分析无法进行,或者得到错误的信息。
一、认识软件错误
1.1 为什么会出错?
生物信息在 Linux 系统下采取命令行模式运行,命令行运行需要严格的执行标准,必须遵循严格的语法限制。相差一个字符都有可能无法运行,有些情况下多出一个空格可能就会有严重的影响,造成不可挽回的损失,例如下面这条命令,
- 删除所有以 fq.gz 结尾的文件
- rm -rf *.fq.gz #正确语法
- rm -rf * .fq.gz #错误语法,通配符后多了一个空格
复制代码 上面的代码中,本来是要删除所有以 fq.gz 结尾的文件,由于都了一个空格,就会将全部文件删除,造成重大损失。因此,在 Linux 系统命令行下操作,必须遵循严格的语法。否则软件就会提示错误,一般会给出相应的错误,可根据相应错误提示信息进行排错。
1.2 提示警告与报错
软件运行过程中一般会给出屏幕输出信息,屏幕输出信息并不是都是错误信息。有的是输出结果,是我们需要的内容;有时候是软件运行的提示信息,例如软件每一步都做了哪些除了,这都是正常显示;还有一些是警告信息,让你注意,最后就是错误信息 Error,这就需要特别处理了。错误信息对导致软件中断。在一些命令行终端中,错误信息会有红色颜色显示。下面分别进行介绍。
1.2.1 返回空白
运行之后没有任何返回结果,比如一个运行结束,直接返回命令行。这是正常现象。命令行操作的逻辑都是正确执行不提示,有问题才提示。
1.2.2 提示信息
一些操作需要给出一些提示信息,例如 fastqc 软件,则会返回一些提示信息,例如显示有百分之几的数据处理完了。这样就把软件运行的过程给详细展示出来,如果在哪一步出现问题,就一目了然了。这些都是注释信息,属于正常提示信息。
- nohup: ignoring input and appending output to `nohup.out'
复制代码 忽略输入输出,将信息化信息记录到 nohup.out 文件中。
1.2.3 警告信息 Warnings
警告信息是一种比较令人迷惑的内容,但其实警告信息是非常重要的,很多人经常将警告信息和错误信息相混淆。警告信息并不影响软件运行,但是提示需要用户特别注意。比如加载 R 包的时候,提示当前的包是基于最新 R 版本构建的,用户使用的 R 版本与构建包的版本不一致,这个只是一个警告,并不影响包的使用,大部分情况下也不会影响结果。还有就是在做统计检验过程中,会提示你的数据模型太小,虽然也会返回结果,但可能存在
误差,需要用户注意。大家需要知道的就是警告信息并不影响软件执行,但是要特别注意。
1.2.4 错误信息 Error
最后一个比较重要的就是错误信息,错误信息也是经常会遇到的,错误信息直接给出 Error提示内容,终止掉软件的执行,必须处理,否则无法得到结果。不过很多软件的报错信息其实已经非常完善了,比如经常遇到的“command not found”,“No sucn file or dirctory",“ installation of package ‘Rcpp’ had non-zero exit status"等。遇到这种问题就需要根据经验分析错误,遇到多了才能知道该如何解决。或者直降将错误信息复制到搜索引擎里寻找解决方案。
1.3 错误提示关键字
错误提示会给出一些关键字,根据关键字进行判断。
语法问题:synatax
参数问题:argument
权限问题:permission
网络问题:connection
内存问题:dump
磁盘问题:disk
二、解决错误
在命令行模式下运行生物软件,主要考虑三个因素。软件,输入文件,选项参数。那么可能出错的地方也就在此,部分情况下也可能是硬件问题,比如资源不足。如果是像上面介绍过的错误,一般容易发现,比较好解决。但是软件、输入文件,选项参数都检查过了,还是提示错误,该如何解决呢?
2.1 学会分析问题
好的软件在内部都会有处理错误的机制,比如 perl 或者 python 的程序,一般会提示错误,面对错误,一定要做到,不要害怕。尝试阅读提示内容。如果发现里面有 Memory,那么就可能是和内存相关,是不是内存不够用了。如果是包含 Socket,那么可能是网络问题等;
2.2 Google 一下
你所遇到的问题,几乎别人都遇到过,所以,Google 一下,或者 bing 一下错误,看一下别人同样的问题是如何解决的,Google 几乎可以找到所有的报错内容。但是你最好要学会搜索,不要把好几页的错误内容都去 Google,要学会使用关键字,至于如何使用个关键字搜索,这个你自己 Google 一下吧。
2.3 控制单因素变量测试
如果以上方法都试了,还是找不到错误,就尝试控制单因素变量,进行测试。例如有这样的代码
- barplot(x,xlab='', ylab="genexpression",names.arg=c("Control","Cold",
- "Osmotic", "Salt", "Drought", "Genotoxic", "Oxidative", "UV-B",
- "Wounding","Heat"),col =
- c(brewer.pal(9,"Blues")[1],brewer.pal(9,"Blues")[2],brewer.pal(9,"Blues")[3],b
- rewer.pal(9,"Blues")[4],brewer.pal(9,"Blues")[5],brewer.pal(9,"Blues")[6],brew
- er.pal(9,"Blues")[7],brewer.pal(9,"Blues")[8],brewer.pal(9,"Blues")[9]),cex.ax
- is=1.5,cex.names=1.5,legend.text= c("0 Hour", "After 0.25 Hour", "After 0.5
- Hour", "After 1 Hour", "After 3 Hours", "After 4 Hours", "After 6 Hours",
- "After 12 Hours", "After 24 Hours"
- ),args.legend =list(x = "right",cex=1),beside=TRUE)
- abline(h=0)
复制代码 上面是一条很长的绘图函数。一次运行会出错,那么怎么办呢。这个时候就一点点筛选,到底是哪个地方出现了问题。
首先
如果没有问题,在一点点加选项,直到找到出错的地方为止,就是这样。而不是全部代码中去查找。
2.4 截取部分数据测试
如果感觉数据有问题,就换另外的小数据测试一下,或者截取部分进行测试。比如人基因组很大的数据,如果运行程序出错了,可以用 head 命令每个截取一部分进行测试。
三、常见错误
下面给出一些生物软件分析过程中常见问题。
3.1 command not found
这样的错误,原因就是软件没有安装,或者是软件路径没有写正确,还有一种可能是软件名写错了,或者没有区分大小写;
解决方案:
1、检测软件是否安装正确,有可执行程序,使用全路径试一下;
2、将软件可执行程序路径添加到.bashrc 文件中的 PATH 变量中
3.2 No such file or directory
如果敲软件名,软件可以运行,或者之前软件都可以运行,那么绝大部分就是输入文件的问题。输入文件经常出现“No such file or directory”,这就是因为输入文件路径写错了,在R 语言中“Error: object 'x' not found”的错误与之类似。那么检查一下这个对象是否存在,是否有值。
解决方案:
检查文件路径是否正确,文件是否存在;
3.3 文件格式
对于输入文件,另一个比较重要的错误就是文件格式。每一款软件都需要严格的输入文件格式,比如 fastq,fasta,sam,bam,vcf 等,不能随便输入。还有就是数量的问题,软件需要输入三个文件,你就不能输入两个,也不能输入四个。
3.4 软件选项参数
如果软件和输入文件都没有错误,那么就有可能是选项参数的问题。检查选项参数是否写正确,-i 是否写成-a 了,是否忘了加空格。一般这种情况下,软件不会运行,而是给出帮助信息。
3.5 Permission denied
这个是因为没有写的权限,就会提示,“Permission denied”,有些软件默认安装到系统目录,普通用户没有权限往这些路径写内容。
3.6 软件版本问题
系统中会存在多个软件版本,例如 python2 与 python3,要知道默认软件的版本,例如在命令行敲 python 或者 perl 的时候,要清楚使用具体软件的版本。一个好的方法是使用which 命令,可以查看软件的全路径。
3.7 网络问题
有些软件运行过程中需要联网,但出现错误代码 Http,403,404,connection 等关键字的时候,需要考虑网络连接问题。
3.8 文件问题
输入文件不存在,或者大小为空,文件不完整,或者输出文件已存在等。
not a regular file;
unexpected end of file;
File exists;
|
|