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-27Run an external command-line program as input, output or intermediary
Apache Hop (1)
Execute a processread 2026-09-27Run an operating-system command per row and capture output and exit code
Apache NiFi (2)
ExecuteProcessread 2026-09-27Run an operating system command and write its output to a FlowFile
ExecuteStreamCommandread 2026-09-27Pass FlowFile content to an external command and capture what the command returns
EasyMorph (2)
Iterate programread 2026-09-27Run an external application once per row of the table (paid editions only)
Run programread 2026-09-27Run an external application once (paid editions only)
KNIME Analytics Platform (2)
KNIME External Tool Support (Labs) (extension)read 2026-09-27Extension outside the base install: 1 current node: External Tool (Labs)
KNIME External Tool Support (extension)read 2026-09-27Extension outside the base install: 1 current node: External Tool
Pentaho Data Integration (1)
Execute a processread 2026-09-27Run an operating-system process and return its result
RapidMiner Studio (1)
Execute Programread 2026-09-27Run a shell command or external program
Talend (1)
tSystemread 2026-09-27Run 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]
Sources
- [1]Execute a process | Apache Hopdocumentation
- [2]RUN PROGRAM [EasyMorph Help]documentation
- [3]Run Command Tooldocumentation
- [4]ITERATE PROGRAM [EasyMorph Help]documentation
- [5]Execute Program - Rapidminer Documentationdocumentation
- [6]Code injection - Wikipediasecondary source
- [7]subprocess — Subprocess management — Python 3.15.2 documentationdocumentation
- [8]ExecuteStreamCommand - Apache NiFidocumentation
- [9]ExecuteProcess - Apache NiFidocumentation