Control / exec · All operations

Run a program on this machine

A variant of Run an external command

Run an operating-system command or external program, once or per row, and capture its output and exit code.

Status

In arcform

Not built yet

arcform does not do this yet; it would live in how a Protocol runs. Its place on the roadmap

What other tools call it

Meridian's classification; an independent blind rating agreed on 95.7% of 324 rows (variant, version 3).

Alteryx Designer (1)
  • Run Commandread 2026-09-27

    Run an external command-line program as input, output or intermediary

Apache Hop (1)
  • Execute a processread 2026-09-27

    Run an operating-system command per row and capture output and exit code

Apache NiFi (2)
  • ExecuteProcessread 2026-09-27

    Run an operating system command and write its output to a FlowFile

  • ExecuteStreamCommandread 2026-09-27

    Pass FlowFile content to an external command and capture what the command returns

EasyMorph (2)
  • Iterate programread 2026-09-27

    Run an external application once per row of the table (paid editions only)

  • Run programread 2026-09-27

    Run an external application once (paid editions only)

KNIME Analytics Platform (2)
Pentaho Data Integration (1)
  • Execute a processread 2026-09-27

    Run an operating-system process and return its result

RapidMiner Studio (1)
Talend (1)
  • tSystemread 2026-09-27

    Run a system command

Background

Apache Hop's Execute a process transform runs a shell script on the host that runs the pipeline, and can run it for every row.[1] Apache Hop's Execute a process transform adds the process's standard output (stdout), standard error (stderr) and exit value to the row as fields.[1] EasyMorph's Run program action runs an external application and waits until it finishes, and fails if the application returns a non-zero exit code.[2]

When to use it

Alteryx Designer's Run Command tool is meant for cases such as when Designer does not have the needed functionality, calling third-party applications, and wrapping custom functionality written in other programming languages.[3] EasyMorph's Iterate program action runs an external application once for every line in the table, while its Run program action runs it once.[4][2] Where a program can take a whole file at once, one run is easier to follow and to retry than one run per row; keep per-row runs for work where each row names its own job. (Meridian's view)

Apache Hop's Execute a process transform starts the process directly, not through a shell, so pipes, redirection, wildcards and shell variable expansion reach the process as literal arguments.[1] To use shell features with Apache Hop's Execute a process transform, a shell is run explicitly, for example /bin/sh with the arguments -c and the command line.[1] RapidMiner's Execute Program operator builds the command with Java's ProcessBuilder, which parses the string into tokens that are not interpreted by a shell.[5] With RapidMiner's Execute Program operator, a command that needs piping, redirection or other shell features is best put in a small shell script.[5] Shell injection, also called command injection, applies to most systems that allow software to programmatically execute a command line.[6] Python's subprocess module does not implicitly call a system shell, so all characters, shell metacharacters included, can safely be passed to the processes it starts.[7] In Python's subprocess module, an application that invokes the shell explicitly with shell=True must quote all whitespace and metacharacters itself to avoid shell injection vulnerabilities.[7] The Arguments in fields option of Apache Hop's Execute a process transform passes each argument exactly as it is, with no splitting and no quote removal, and is the most reliable option for values that come from data, such as file paths built at runtime.[1] Pass values from the data as separate arguments rather than pasting them into one command line, and start a shell only when a shell feature is really needed. (Meridian's view)

Apache Hop's Execute a process transform has a Fail if not success option, which makes the transform fail when the exit status is different from zero.[1] Apache NiFi's ExecuteStreamCommand processor sends the command's output down one route, output stream, when the returned status code is zero, and down another, nonzero status, otherwise.[8] Without an output line delimiter, Apache Hop's Execute a process transform collapses all returned lines into a single string with no line delimiters.[1] In Python's subprocess module, Popen.wait will deadlock when stdout or stderr is a pipe and the started process writes enough output to block on the operating system's pipe buffer, and Popen.communicate avoids that.[7] Because of a Java bug on Windows, RapidMiner's Execute Program operator can only stop the processes it starts directly, so processes started by a shell it launched keep running.[5]

The method

Apache NiFi's ExecuteProcess processor runs an operating system command specified by the user and writes the output of that command out as data.[9] When a command is expected to be long-running, Apache NiFi's ExecuteProcess processor can send out partial output on a specified interval, and that output is then expected to be text.[9] In Apache NiFi's ExecuteProcess and ExecuteStreamCommand processors, a command given only as the name of an executable must be in the user's environment PATH.[9][8] RapidMiner's Execute Program operator pipes a file sent to its input port to the standard input (stdin) of the process.[5] EasyMorph's Run program action can capture an application's STDOUT and STDERR, and captures STDERR in a separate column that can be used for error handling.[2] In EasyMorph's Run program action, leaving the application blank makes the Windows shell (cmd.exe) execute the command line.[2]

Compared with the alternatives

Apache Hop's Execute a process transform is similar to its Shell workflow action, which is built for scripts, but can be used in a pipeline to execute for every row.[1] A safer alternative to invoking an external program in a shell is an API that implements the functionality directly in the programming language, such as a Git API like libgit2 in place of git shell commands.[6]