Example

Stand-alone command line apps

If for some reason you do not want call moke to execute your mokefile it is possible to rename it and call it directly.:

chmod +x mokefile.py
mv mokefile.py myapp.py
./myapp.py <task>

This requires shebang line:

#!/usr/bin/env python3

If your mokefile.py contains only a single task call the function main and you will be able to omit <task> from the call:

./myapp.py

The tiny grop.py example included in the test-suite is a tiny replacement for grep.

#!/usr/bin/env python3
from moke import *
import re

@task
def main(pattern, i=stdin, o=stdout, only_matching=False):
    """grop is not grep.
    """
    sre = re.compile(pattern)
    with i as i, o as o:
        for line in i:
            match = sre.match(line)
            if match:
                if only_matching:
                    o.write("%s\n" % match.groups()[0])
                else:
                    o.write(line)
    
if __name__ == "__main__":
    task()

Example usage (in the test directory):

cat data/grop.inp | scripts/grop.py ".*\(\d{2}\).*"'