nextflow中文文档(4): 流程/进程(Processes)

Processes

在Nextflow中,process 是执行用户脚本的基本处理primitive

进程定义以关键字 process开始,接着是进程名,最后是用花括号分隔的进程体。进程主体必须包含一个表示命令的字符串,或者,包含由它执行的脚本。基本流程如下例所示:

process sayHello {

    """
    echo 'Hello world!' > file
    """

}

一个流程可以包含五个定义块,分别是:指令、输入、输出、when从句和流程脚本。语法定义如下:

process < name > {

   [ directives ]

   input:
    < process inputs >

   output:
    < process outputs >

   when:
    < condition >

   [script|shell|exec]:
   < user script to be executed >

}

Script

script块是一个字符串语句,它定义了进程执行任务时所执行的命令。

一个进程包含且仅包含一个script块,当进程包含输入和输出声明时,它必须是最后一条语句。

输入的字符串在host系统中作为Bash脚本执行。它可以是您通常在终端shell或公共Bash脚本中使用的任何命令、脚本或它们的组合。

script语句中可以使用的命令的唯一限制是目标执行系统中这些程序的可用性。

脚本块可以是一个简单的字符串或多行字符串。后者简化了由跨多行多个命令组成的非简单脚本的编写。例如:

process doMoreThings {

  """
  blastp -db $db -query query.fa -outfmt 6 > blast_result
  cat blast_result | head -n 10 | cut -f 2 > top_hits
  blastdbcmd -db $db -entry_batch top_hits > sequences
  """

}

正如 script教程部分所解释的,字符串可以通过使用单引号或双引号定义,多行字符串可以由三个单引号或三个双引号字符定义。

他们之间有一个微妙但重要的区别。与Bash类似,以"分隔的字符串支持变量替换,而以'分隔的字符串则不支持变量替换。

在上面的代码片段中,$db变量被管道脚本中某处定义的实际值所替换。

!Warning

由于Nextflow对字符串中的变量替换使用相同的Bash语法,因此需要仔细管理它们,这取决于您是想在Nextflow上下文中计算变量,还是在Bash环境执行中计算变量。

当需要访问脚本中的系统环境变量时,有两个选项。第一种选择与使用单引号字符串定义脚本块一样简单。例如

process printPath {

   '''
   echo The path is: $PATH
   '''

}

这种解决方案的缺点是,您将无法在脚本块中访问管道脚本上下文中定义的变量。

要解决这个问题,请使用双引号字符串定义脚本,并在系统环境变量前加上反斜杠\字符进行转义,如下面的示例所示:

process doOtherThings {

  """
  blastp -db \$DB -query query.fa -outfmt 6 > blast_result
  cat blast_result | head -n $MAX | cut -f 2 > top_hits
  blastdbcmd -db \$DB -entry_batch top_hits > sequences
  """

}

在本例中,\$MAX变量必须在之前的管道脚本中定义。Nextflow在执行脚本之前用实际值替换它。相反,$DB变量必须存在于脚本执行环境中,Bash解释器将用实际值替换它。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,135评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 6,949评论 0 2
  • 今天上午陪老妈看病,下午健身房跑步,晚上想想今天还没有断舍离,马上做,衣架和旁边的的布衣架,一看乱乱,又想想自己是...
    影子3623253阅读 2,953评论 3 8