ecFlow's documentation is now on readthedocs!

Here is an example of a script as a local native perl task

  • definition file:
   task perl
     edit ECF_MICRO '^'
     edit ECF_JOB_CMD '^ECF_JOB^ > ^ECF_JOBOUT^ 2>&1'
     label info "none"
     meter step -1 100 100
     event 1
     event 2
  • headers:

    #!/usr/bin/env perl
    # head.pl
    use strict;
    
    my $ECF_PORT=^ECF_PORT:0^;
    $ENV{'ECF_PORT'} = "^ECF_PORT:0^"; # port
    $ENV{'ECF_NODE'} = "^ECF_NODE:0^"; # host
    $ENV{'ECF_NAME'} = "^ECF_NAME:0^"; # task path
    $ENV{'ECF_PASS'} = "^ECF_PASS:0^"; # password
    $ENV{'ECF_TRYNO'} = "^ECF_TRYNO:0^"; # job number
    
    sub xinit() { system("ecflow_client --init=$$"); }
    sub xabort() { system("ecflow_client --abort=$$"); }
    sub xcomplete() { system("ecflow_client --complete"); }
    sub xmeter($$) { my $name=shift; my $value=shift; 
    		 system("ecflow_client --meter=$name $value"); }
    sub xevent($)  { my $n=shift;    system("ecflow_client --event=$n"); }
    sub xlabel($$) {  my $name=shift; my $value=shift; 
    		  system("ecflow_client --label $name $value"); }
    xinit();
    eval '
    
    # tail.pl
    ';
    if ($@){
        print "caught signal: $@\n";
        xabort();
        exit;
      }
    print "the job is now complete\n";
    xcomplete();
    exit;
  • task wrapper:

    #!/usr/bin/perl -w
    # perl.ecf
    ^include <head.pl>
    ^manual
    one liner manual
    ^end
    ^comment
    one liner comment
    ^end
    
    xlabel("info", "start");
    xevent("1");
    print "a perl task";
    for (my $step=1; $step <= 100; $step++) {
       print "this is the step number $step\n";
       xmeter("step", $step);
    }
    	
    xevent("2");	  
    xlabel("info", "completion");
    ^include <tail.pl>