Skip to content

Working directory

Every step is executed in a working directory, which you can specify when creating a step. If the arguments inp, out and vol contain relative paths, they are assumed to be relative to the working directory.

Warning

StepUp assumes that the current working directory is not changed between importing any stepup module and calling functions from stepup.core.api

Example

Example source files: docs/getting_started/workdir/

Create a top-level plan.py as follows:

#!/usr/bin/env python3
from stepup.core.api import static, step

static("out/")
step("echo 'a friendly file' > ${out}", workdir="out/", out="hello.txt")

Make the scripts executable and run everything as follows:

chmod +x plan.py
mkdir out/
stepup -n 1

You should get the following terminal output:

  DIRECTOR │ Listening on /tmp/stepup-########/director (StepUp 2.0.4)
   STARTUP │ (Re)initialized boot script
  DIRECTOR │ Launched worker 0
     PHASE │ run
     START │ ./plan.py
   SUCCESS │ ./plan.py
     START │ echo 'a friendly file' > hello.txt  # wd=out/
   SUCCESS │ echo 'a friendly file' > hello.txt  # wd=out/
  DIRECTOR │ Trying to delete 0 outdated output(s).
  DIRECTOR │ Stopping workers.
  DIRECTOR │ See you!

This will create an output file out/hello.txt

Further reading

  • The step() function and related functions that use step() internally all return a StepInfo object, which may be used for defining follow-up steps. The StepInfo objects follow the same convention: their inp, out and vol attributes are lists of paths. If these are relative paths, they are relative to the step_info.workdir attribute. Consult the section StepInfo Objects for more details.

  • In advanced workflows, the HERE and ROOT variables can be convenient to construct relative paths based on the current working directory.