Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Getting+Started
Button Hyperlink
titleUp
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Tutorial
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Understanding+Includes


There are several ways of defining the suite definition
This tutorial will give examples for both the plain text and Python methods.
      

Text Method

The python method is recommended unless you are planning a simple suite.

Create a file called test.def , using your favourite text editor, with the following contents

Code Block
title$HOME/course/test.def
linenumberstrue
#

...

 Definition of the suite test

...


suite test
   edit ECF_HOME "$HOME/course"  # replace '$HOME' with the path to your home directory
   task t1
endsuite


This file contains the suite definition of a suite called test.
This suite contains a single task called t1.
Let us go through the lines one by one:
  1. This line is a comment line. Any characters between the # and the end of line are ignored
  2. This line defines a new suite by the name of test.
  3. Here we define a ecFlow variable called ECF_HOME.
    This variable defines the directory where all the unix files that will be used by the suite test will reside.
    For the rest of the course all file names will be given relative to this directory.
    Be sure to replace $HOME with the path to your home directory
  4. This defines a task named t1
  5. The endsuite finishes the definition of the suite test 

Python Method

Enter the following python code into a file i.e. test.py :

Code Block
languagepy
title$HOME/course/test.py
import os
from ecflow import Defs,Suite,Task,Edit
   
print("Creating suite definition")
home = os.path.join(os.getenv("HOME"),"course")
defs = Defs( 
        Suite('test',
            Edit(ECF_HOME=home),
            Task('t1')))
print(defs)


Then run as a python script:   

Code Block
python3 test.py


Alternatively add the following as the first line in test.py 


Code Block
languagepy
title$HOME/course/test.py
#!/usr/bin/env python3            
...


Code Block
chmod +x test.py
./test.py  # this uses shebang, see below, searches for specified python variant in $PATH

You should see the text "Creating suite definition" and then your definition as your output.

What to do

  1. Initially try both plain text and python examples. Later examples are only in python.
  2. Type in the suite definition file.
  3. Choose python invocation.  i.e.    python3 test.py    |    ./test.py.   


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Getting+Started
Button Hyperlink
titleUp
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Tutorial
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Understanding+Includes

endsuite</pre> </div> <div class="line-block"> <div class="line">This file contains the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite-definition"><em class="xref std std-term">suite definition</em></a> of a <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite"><em class="xref std std-term">suite</em></a> called test.</div> <div class="line">This suite contains a single <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-task"><em class="xref std std-term">task</em></a> called <strong>t1</strong>.</div> <div class="line">Let us go through the lines one by one:</div> </div> <ol class="arabic"> <li><p class="first">This line is a comment line. Any characters between the # and the end of line are ignored</p> </li> <li><p class="first">The second line is empty</p> </li> <li><p class="first">This line defines a new <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite"><em class="xref std std-term">suite</em></a> by the name of test.</p> </li> <li><p class="first">Here we define a ecflow <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a> called ECF_HOME.</p> <p>This <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a> defines the directory where all the unix files that will be used by the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite"><em class="xref std std-term">suite</em></a> test will reside.</p> <p>For the rest of the course all file names will be given relative to this directory.</p> <p>Be sure to <strong>replace</strong> $HOME with the path to your home directory</p> </li> <li><p class="first">This defines a <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-task"><em class="xref std std-term">task</em></a> named <strong>t1</strong></p> </li> <li><p class="first">The <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammar-token-endsuite"><tt class="xref std std-token docutils literal"><span class="pre">endsuite</span></tt></a> finishes the definition of the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite"><em class="xref std std-term">suite</em></a> test</p> </li> </ol> </div> <div class="section" id="python"> <h2>Python<a class="headerlink" href="#python" title="Permalink to this headline">¶</a></h2> <p>Alternatively enter the following python code into a file, i.e <tt class="file docutils literal"><span class="pre">test.py</span></tt> :</p> <div class="highlight-python"><div class="highlight"><pre><span class="c">#!/usr/bin/env python2.7</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">ecflow</span> <span class="k">print</span> <span class="s">&quot;Creating suite definition&quot;</span> <span class="n">defs</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Defs</span><span class="p">()</span> <span class="n">suite</span> <span class="o">=</span> <span class="n">defs</span><span class="o">.</span><span class="n">add_suite</span><span class="p">(</span><span class="s">&quot;test&quot;</span><span class="p">)</span> <span class="n">suite</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">&quot;ECF_HOME&quot;</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">&quot;HOME&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;/course&quot;</span><span class="p">)</span> <span class="n">suite</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="s">&quot;t1&quot;</span><span class="p">)</span> </pre></div> </div> <p>Then run as a python script:</p> <div class="highlight-python"><pre>python test.py</pre> </div> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">All the following python examples should be run in the same way.</p> </div> <p><strong>What to do:</strong></p> <ol class="arabic simple"> <li>Choose between entering plain text or python</li> <li>Type in the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite-definition"><em class="xref std std-term">suite definition</em></a> file.</li> </ol> </div> </div>