首页天道酬勤整体管理输入,输出,工具技术,47个过程输入输出工具速记口诀

整体管理输入,输出,工具技术,47个过程输入输出工具速记口诀

张世龙 05-13 09:13 60次浏览

WDL是由Broad Institute开发的生物信息流流程开发语言,与传统的shell流程相比,具有复用性好、支持多集群架构、多任务并行化方便等优点,是首次接触、简易的shell流程

1.WDL参考有关WDL语言的一些基本概念,请参见以下教程。

Cromwell WDL学习: https://blog.csdn.net/QQ _ 41551450/article/details/93486438 gatkcromwellwdl学习: https://blog.csdn.net 979FD06661CB官方文档: https://github.com/open wdl/wdl/blob/main/versions/der sions # task create _ workdir所需参数workdir 声明calltaskcreate_workdir3360以确定taskcreate_workdir所需的参数workdir # call task create_file :是task create _ file所需的参数内容传递到task create_workdir的输出work _ path # calltaskwrite _ file:task create _ workdir,其中, filepath的内容是task create_file的输出file _ pathworkflowmyworkflow { string workdir _ pathcallcreate _ workdir } 作为input3360workdir的call create _ file { input : filedir=create _ workdir.work _ path } 创建callwrite _ file { input : workdir=workdir _ file path=create _ file _ path } #目录,并在目录中表示操作完成如果目录已经存在,则只创建workdir.EXIST文件。 #输入:要创建的目录路径#输出:要创建的目录路径(输入、输出实际完全相同)声明:变量workdir的类型为字符串#command :可执行的shell代码,可以用{}或括起来。 建议与代码的其他部分区分开来,提高可读性。 #output :声明并分配值后,可用作-d ${workdir} ]; then mkdir $ { workdir } touch $ { workdir }/workdir.successelsetouch $ { workdir }/workdir.existfioutput { string work } ”,然后选择file.EXIST文件#input :文件所在的目录,即task create_workdir的输出目录、文件路径(文件所在的目录文件名) then touch $ { filename } touch $ { filedir }/file.success else echo ' file exist!' touch $ { filedir }/file.existfioutput { string file _ path=' $ { filename } } #将内容写入文件,并在文件所在的目录中表示操作完成输出:创建文件内容task write _ file { stringworkdirstringfilepathstri }

ng file_content = "Tomorrow is another day." command <<< if [ -f ${filepath} ]; then echo "${file_content}" >${filepath} touch ${workdir}/write.SUCCESS else echo "File not exist!" touch ${workdir}/write.FAIL fi >>> output { String file_txt = "${file_content}" }} 3.语法检查与流程图

安装womtool:https://anaconda.org/bioconda/womtool

完成WDL流程后,可通过womtool进行语法检查,有语法错误会输出错误信息,无则输出“Success!”

#无语法错误java -jar ../docker/womtool-46.jar validate workflow_test_pipe1.wdlSuccess!#语法错误:workflow缺少一个花括号java -jar ../docker/womtool-46.jar validate workflow_test_pipe1.wdlERROR: Unexpected symbol (line 21, col 1) when parsing '_gen10'.Expected rbrace, got task.task create_workdir {^$e = :identifier <=> :dot :identifier -> MemberAccess( lhs=$0, rhs=$2 )

womtool还可根据task间的输入输出关系绘制流程图,清晰地展示各task之间的依赖关系:

java -jar ../docker/womtool-46.jar graph workflow_test_pipe1.wdl >workflow_test_pipe1.wdl.dot#转换为svg格式dot -Tsvg -o workflow_test_pipe1.wdl.svg workflow_test_pipe1.wdl.dot


参考:
Linux命令之dot - 绘制DOT语言脚本描述的图形:https://www.cnblogs.com/zengkefu/p/5569649.html

4.参数输入

womtool可解析WDL脚本,创建json格式的参数输入文件,格式为:

{ "<workflow name>.<task name>.<variable name>": "<variable type>"}

示例:

java -jar ../docker/womtool-46.jar inputs workflow_test_pipe1.wdl >workflow_test_pipe1.wdl.jsoncat workflow_test_pipe1.wdl.json{ "myWorkflow.write_file.file_content": "String (optional, default = \"Tomorrow is another day.\")", "myWorkflow.workdir_path": "String"}

整个工作流中,需要输入的参数仅为:workdir_path(需要创建的新目录路径)和task write_file中的file_content(写入文件test1.txt的内容)。
且file_content已指定默认值,可在json文件中直接删除该行,不传入任何参数。

修改json文件,只输入workdir_path:

vi workflow_test_pipe1.wdl.json{ "myWorkflow.workdir_path": "/home/test/wdl_test/test/test2/"} 5.运行

运行需安装cromwell:
https://github.com/broadinstitute/cromwell/releases

运行示例:

java -jar ../docker/cromwell-45.1.jar run workflow_test_pipe1.wdl --inputs workflow_test_pipe1.wdl.json

打开workdir_path,可见被写入内容的test1.txt文件和3个表示运行正常的SUCCESS空文件:

cd /home/test/wdl_test/test/test2lsfile.SUCCESS test1.txt workdir.SUCCESS write.SUCCESScat test1.txt Tomorrow is another day.

再次运行脚本,由于目录和文件已存在,会创建workdir.EXIST文件和file.EXIST文件,并再次写入文件内容。

6.标准输出

运行WDL脚本后,WDL文件所在目录会新增cromwell-executions和cromwell-workflow-logs两个目录,标准输出及错误均可在cromwell-executions中查看

#进入cromwell-executions目录,可见以myWorkflow(工作流名称)命名的目录cd cromwell-executions/lshelloworld myWorkflow test#进入工作流目录及其最新的运行目录cd myWorkflow/ll -t |headtotal 0drwxrwxr-x 5 test test 96 Apr 27 11:13 26fe9d20-bb48-4beb-b992-1264002ed5fbcd 26fe9d20-bb48-4beb-b992-1264002ed5fb/#可见以"call-task名"命名的目录lscall-create_file call-create_workdir call-write_file#进入call-create_file/execution,可见运行脚本,标准输出,标准错误等文件lsrc script script.background script.submit stderr stderr.background stdout stdout.background#task create_file的标准输出“File exist!”即在stdout文件中cat stdoutFile exist!
, ,