定义新的 suite

有多种定义 suite definition 的方法,参看 Definition creation strategies

本教程介绍下面两种方式:

  • 文本方法
  • Python 方法

文本方法

创建文本文件 test.def,内容如下:

  1. # Definition of the suite test
  2. suite test
  3. edit ECF_HOME "$ECF_HOME" # replace '$ECF_HOME' with the path to your ECF_HOME directory
  4. task t1
  5. endsuite

译者注:与 SMS 的定义方式相同,只需要修改变量名,将 SMS_XXX 修改为 ECF_XXX

上述文件包含一个名为 test 的 suite 的 suite definition,该 suite 包含一个名为 t1 的 task。

下面逐行解释含义

  1. 该行为注释。在 # 后到行尾之间的所有字符都会被忽略。
  2. 定义一个名为 test 的新的 suite。
  3. 定义一个 ecflow 变量(variable),叫做 ECF_HOME。该变量定义定义名为 test 的 suite 可以在哪里找到所有的 unix 文件。余下的课程中,所有的文件名都相对于该目录。确保用你的 ECF_HOME 目录替换 $ECF_HOME
  4. 定义一个名为 t1 的 task。
  5. endsuite 结束名为 test 的 suite 的定义。

python方法

创建一个 python 文件,例如命名为 test.py:

  1. import os
  2. from ecflow import Defs, Suite, Task, Edit
  3. print("Creating suite definition")
  4. home = os.path.join(os.getenv("HOME"), "course")
  5. defs = Defs(
  6. Suite('test',
  7. Edit(ECF_HOME=home),
  8. Task('t1')))
  9. print(defs)

运行脚本

  1. $ python test.py
  2. Creating suite definition
  3. # 4.8.0
  4. suite test
  5. edit ECF_HOME '/g1/u/wangdp/course'
  6. task t1
  7. endsuite

附:下面时 2017 版的 suite 定义脚本,可以看到更新后的 ecflow 提供更简洁的 suite 定义方式。

  1. #!/usr/bin/env python2.7
  2. import os
  3. import ecflow
  4. print "Creating suite definition"
  5. defs = ecflow.Defs()
  6. suite = defs.add_suite("test")
  7. suite.add_variable("ECF_HOME", os.path.join(os.getenv("HOME"), "course"))
  8. suite.add_task("t1")

接下来的所有 Python 例子都应该用这种方式运行。

任务

  1. 尝试测试两种方法,后续例子将只用 python 接口
  2. 创建并编辑 suite definition 文件