Bash Apps

@bash_app
def echo(
    name: str,
    stdout=parsl.AUTO_LOGNAME  # Requests Parsl to return the stdout
):
    return f'echo "Hello, {name}!"'

future = echo('user')
future.result() # block until task has completed

with open(future.stdout, 'r') as f:
    print(f.read())

A Parsl Bash app executes an external application by making a command-line execution. Parsl will execute the string returned by the function as a command-line script on a remote worker.

Rules for Function Contents

Bash Apps follow the same rules as Python Apps. For example, imports may need to be inside functions and global variables will be inaccessible.

Inputs and Outputs

Bash Apps can use the same kinds of inputs as Python Apps, but only communicate results with Files.

Bash Apps, unlike Python Apps, can also return the content printed to the Standard Output and Error.

Special Keywords Arguments

In addition to the inputs, outputs, and walltime keyword arguments described above, a Bash app can accept the following keywords:

  1. stdout: (string, tuple or parsl.AUTO_LOGNAME) The path to a file to which standard output should be redirected. If set to parsl.AUTO_LOGNAME, the log will be automatically named according to task id and saved under task_logs in the run directory. If set to a tuple (filename, mode), standard output will be redirected to the named file, opened with the specified mode as used by the Python open function.

  2. stderr: (string or parsl.AUTO_LOGNAME) Like stdout, but for the standard error stream.

  3. label: (string) If the app is invoked with stdout=parsl.AUTO_LOGNAME or stderr=parsl.AUTO_LOGNAME, this argument will be appended to the log name.

Outputs

If the Bash app exits with Unix exit code 0, then the AppFuture will complete. If the Bash app exits with any other code, Parsl will treat this as a failure, and the AppFuture will instead contain an BashExitFailure exception. The Unix exit code can be accessed through the exitcode attribute of that BashExitFailure.

Execution Options

Bash Apps have the same execution options (e.g., pinning to specific sites) as the Python Apps.

MPI Apps

Applications which employ MPI to span multiple nodes are a special case of Bash apps, and require special modification of Parsl’s execution environment to function. Support for MPI applications is described in a later section.