hpcflow.sdk.submission.shells.bash.WSLBash#
- class hpcflow.sdk.submission.shells.bash.WSLBash(WSL_executable=None, WSL_distribution=None, WSL_user=None, *args, **kwargs)#
Bases:
Bash
A variant of bash that handles running under WSL on Windows.
Methods
Produce code to check the looping status of part of a workflow.
Produce code to save a parameter's value into the workflow persistent store.
Produce code to assign the output of the command to a shell variable.
Get the command for submitting a non-scheduled jobscript.
Get WSL and bash version information.
Get the command to wait for a workflow.
Prepare the jobscript path for use.
Prepare the element run directory names for use.
Process the application invocation key in the jobscript header arguments.
Perform any post-processing of an application invocation command name.
Format commands to run within a subshell.
Attributes
Arguments to pass to the shell.
Default for executable name.
Default name of the WSL interface executable.
Template for the jobscript header when directly executed.
Template for the array handling code in a jobscript.
Template for the element processing loop in a jobscript.
Indent for environment setup.
File extension for jobscripts.
Template for the common part of the jobscript header.
Basic indent.
Template for the jobscript body.
Template for the jobscript header when scheduled.
Template for the jobscript shebang line.
The executable to use plus any mandatory arguments.
The name of the file describing the Linux version.
The executable to use in a shebang line.
The WSL executable wrapper.
The WSL distribution to use, if any.
The WSL user to use, if any.
- JS_DIRECT_HEADER: ClassVar[str] = '{shebang}\n\n{header}\n{wait_command}\n'#
Template for the jobscript header when directly executed.
- JS_ELEMENT_ARRAY: ClassVar[str] = 'JS_elem_idx=$(({scheduler_array_item_var} - 1))\n{main}\ncd "$WK_PATH"\n'#
Template for the array handling code in a jobscript.
- JS_ELEMENT_LOOP: ClassVar[str] = 'for ((JS_elem_idx=0;JS_elem_idx<{num_elements};JS_elem_idx++))\ndo\n{main}\ndone\ncd "$WK_PATH"\n'#
Template for the element processing loop in a jobscript.
- JS_HEADER: ClassVar[str] = '{workflow_app_alias} () {{\n(\n{env_setup}{app_invoc}\\\n --with-config log_file_path "$(wslpath -m `pwd`)/{run_log_file}"\\\n --config-dir "{config_dir}"\\\n --config-key "{config_invoc_key}"\\\n "$@"\n)\n}}\n\nWK_PATH=`pwd`\nWK_PATH_ARG=`wslpath -m "$WK_PATH"`\nSUB_IDX={sub_idx}\nJS_IDX={js_idx}\nEAR_ID_FILE="$WK_PATH/artifacts/submissions/${{SUB_IDX}}/{EAR_file_name}"\nELEM_RUN_DIR_FILE="$WK_PATH/artifacts/submissions/${{SUB_IDX}}/{element_run_dirs_file_path}"\n'#
Template for the common part of the jobscript header.
- JS_MAIN: ClassVar[str] = 'elem_EAR_IDs=`sed "$((${{JS_elem_idx}} + 1))q;d" "$EAR_ID_FILE"`\nelem_run_dirs=`sed "$((${{JS_elem_idx}} + 1))q;d" "$ELEM_RUN_DIR_FILE"`\n\nfor ((JS_act_idx=0;JS_act_idx<{num_actions};JS_act_idx++))\ndo\n\n EAR_ID="$(cut -d\'{EAR_files_delimiter}\' -f $(($JS_act_idx + 1)) <<< $elem_EAR_IDs)"\n if [ "$EAR_ID" = "-1" ]; then\n continue\n fi\n\n run_dir="$(cut -d\'{EAR_files_delimiter}\' -f $(($JS_act_idx + 1)) <<< $elem_run_dirs)"\n cd "$WK_PATH/$run_dir"\n app_stream_file="`pwd`/{run_stream_file}"\n\n skip=`{workflow_app_alias} internal workflow "$WK_PATH_ARG" get-ear-skipped $EAR_ID 2>> "$app_stream_file"`\n exc_sk=$?\n\n if [ $exc_sk -eq 0 ]; then\n\n if [ "$skip" = "1" ]; then\n continue\n fi\n\n {workflow_app_alias} internal workflow "$WK_PATH_ARG" write-commands $SUB_IDX $JS_IDX $JS_act_idx $EAR_ID >> "$app_stream_file" 2>&1\n exc_wc=$?\n\n {workflow_app_alias} internal workflow "$WK_PATH_ARG" set-ear-start $EAR_ID >> "$app_stream_file" 2>&1\n exc_se=$?\n\n if [ $exc_wc -eq 0 ] && [ $exc_se -eq 0 ]; then\n . {commands_file_name}\n exit_code=$?\n else\n exit_code=$([ $exc_wc -ne 0 ] && echo "$exc_wc" || echo "$exc_se")\n fi\n\n else\n exit_code=$exc_sk\n fi\n\n {workflow_app_alias} internal workflow "$WK_PATH_ARG" set-ear-end $JS_IDX $JS_act_idx $EAR_ID "--" "$exit_code" >> "$app_stream_file" 2>&1\n\ndone\n'#
Template for the jobscript body.
- JS_SCHEDULER_HEADER: ClassVar[str] = '{shebang}\n\n{scheduler_options}\n{header}\n'#
Template for the jobscript header when scheduled.
- JS_SHEBANG: ClassVar[str] = '#!{shebang_executable} {shebang_args}'#
Template for the jobscript shebang line.
- WSL_distribution#
The WSL distribution to use, if any.
- WSL_executable#
The WSL executable wrapper.
- WSL_user#
The WSL user to use, if any.
- format_loop_check(workflow_app_alias, loop_name, run_ID)#
Produce code to check the looping status of part of a workflow.
- format_save_parameter(workflow_app_alias, param_name, shell_var_name, EAR_ID, cmd_idx, stderr)#
Produce code to save a parameter’s value into the workflow persistent store.
- static format_stream_assignment(shell_var_name, command)#
Produce code to assign the output of the command to a shell variable.
- get_direct_submit_command(js_path)#
Get the command for submitting a non-scheduled jobscript.
- get_version_info(exclude_os=False)#
Get WSL and bash version information.
- Parameters:
exclude_os (bool) – If True, exclude operating system information.
- Return type:
VersionInfo
- get_wait_command(workflow_app_alias, sub_idx, deps)#
Get the command to wait for a workflow.
- os_args#
Arguments to pass to the shell.
- prepare_JS_path(js_path)#
Prepare the jobscript path for use.
- prepare_element_run_dirs(run_dirs)#
Prepare the element run directory names for use.
- process_JS_header_args(header_args)#
Process the application invocation key in the jobscript header arguments.
- Parameters:
header_args (JobscriptHeaderArgs) –
- Return type:
- static process_app_invoc_executable(app_invoc_exe)#
Perform any post-processing of an application invocation command name.