nextflow中文文檔(4): 流程/進程(Processes)

Processes

在Nextflow中,process 是執(zhí)行用戶腳本的基本處理primitive。

進程定義以關(guān)鍵字 process開始,接著是進程名,最后是用花括號分隔的進程體。進程主體必須包含一個表示命令的字符串,或者,包含由它執(zhí)行的腳本?;玖鞒倘缦吕?

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塊是一個字符串語句,它定義了進程執(zhí)行任務時所執(zhí)行的命令。

一個進程包含且僅包含一個script塊,當進程包含輸入和輸出聲明時,它必須是最后一條語句。

輸入的字符串在host系統(tǒng)中作為Bash腳本執(zhí)行。它可以是您通常在終端shell或公共Bash腳本中使用的任何命令、腳本或它們的組合。

script語句中可以使用的命令的唯一限制是目標執(zhí)行系統(tǒng)中這些程序的可用性。

腳本塊可以是一個簡單的字符串或多行字符串。后者簡化了由跨多行多個命令組成的非簡單腳本的編寫。例如:

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教程部分所解釋的,字符串可以通過使用單引號或雙引號定義,多行字符串可以由三個單引號或三個雙引號字符定義。

他們之間有一個微妙但重要的區(qū)別。與Bash類似,以"分隔的字符串支持變量替換,而以'分隔的字符串則不支持變量替換。

在上面的代碼片段中,$db變量被管道腳本中某處定義的實際值所替換。

!Warning

由于Nextflow對字符串中的變量替換使用相同的Bash語法,因此需要仔細管理它們,這取決于您是想在Nextflow上下文中計算變量,還是在Bash環(huán)境執(zhí)行中計算變量。

當需要訪問腳本中的系統(tǒng)環(huán)境變量時,有兩個選項。第一種選擇與使用單引號字符串定義腳本塊一樣簡單。例如

process printPath {

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

}

這種解決方案的缺點是,您將無法在腳本塊中訪問管道腳本上下文中定義的變量。

要解決這個問題,請使用雙引號字符串定義腳本,并在系統(tǒng)環(huán)境變量前加上反斜杠\字符進行轉(zhuǎn)義,如下面的示例所示:

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在執(zhí)行腳本之前用實際值替換它。相反,$DB變量必須存在于腳本執(zhí)行環(huán)境中,Bash解釋器將用實際值替換它。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 16宿命:用概率思維提高你的勝算 以前的我是風險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 8,247評論 0 4
  • 公元:2019年11月28日19時42分農(nóng)歷:二零一九年 十一月 初三日 戌時干支:己亥乙亥己巳甲戌當月節(jié)氣:立冬...
    石放閱讀 7,540評論 0 2
  • 今天上午陪老媽看病,下午健身房跑步,晚上想想今天還沒有斷舍離,馬上做,衣架和旁邊的的布衣架,一看亂亂,又想想自己是...
    影子3623253閱讀 3,076評論 3 8

友情鏈接更多精彩內(nèi)容