Version 1 of pipeline

Updated 2001-09-26 15:00:15

Crucial to "How Tcl is special" is the pipeline. Through the syntax

  set channel [open |$external_command]

Tcl opens an external process, and connects to the stdin, stdout, and stderr of $external_command. Reading and writing to stdin and stdout are with the usual Tcl I/O commands: gets, puts, and read.

This makes for exceptionally handy glue for many situations.


Many Wiki pages and other references obliquely discuss or illustrate Tcl process pipelines. While the construction is crucial to a proper understanding of Tcl's capabilities, many newcomers take quite a while to come across an explanation that "gets through" to them. Among the pertinent available writings are


This transcript of an interaction session illustrates a simple pipeline with Unix's bc executable:

    % set channel [open |bc r+]
    file3
    % puts $channel "1234567890 * 987654321"
    % flush $channel
    % puts [gets $channel]
    1219326311126352690

[Give example of Win* pipeline.]


While (classic) MacOS supports no Tcl pipelines, see "Inventory of IPC methods" for generalizations that apply there and elsewhere.


[Explain "named pipe" as specialization of concept.]


category idiom (?)