SuperCollider CLASSES

Pipe

pipe stdin to, or stdout from, a UNIX shell command

Description

Pipe stdin to, or stdout from, a UNIX shell command. Pipe treats the shell command as if it were a UnixFILE, and returns nil when done. See UnixFILE for details of the access methods. Pipe must be explicitly closed. Do not rely on the garbage collector to do this for you!

Class Methods

*new (commandLine, mode)

Arguments:

commandLine

A String representing a valid shell command.

mode

A String representing the mode. Valid modes are "w" (pipe to stdin) and "r" (pipe from stdout).

Inherited class methods

Undocumented class methods

*call (command, onSuccess, onError, maxLineLength: 4096)

*callSync (command, onSuccess, onError, maxLineLength: 4096)

Instance Methods

-open (commandLine, mode)

Open the file.

Arguments:

commandLine

A command line String passed to popen.

mode

A String passed to popen, so should be one of: "r","w"

-close

Closes the pipe, waiting for the command to finish. You must do this explicitly before the Pipe object is garbage collected.

Returns:

The exit status of the command (an Integer).

Inherited instance methods

Examples

NOTE: For anyone still using OS X 10.3, UNIX commands like pipe do not work when the server is booted; quit the server, otherwise SuperCollider crashes. More recent OS X is not affected.
// this pipes in stdout from ls
(
var p, l;
p = Pipe.new("ls -l", "r");            // list directory contents in long format
l = p.getLine;                    // get the first line
while({l.notNil}, {l.postln; l = p.getLine; });    // post until l = nil
p.close;                    // close the pipe to avoid that nasty buildup
)

A more time-intensive request:

(
var p, l;
p = Pipe.new("ping -c10 sourceforge.net", "r");    // list directory contents in long format
l = p.getLine;                    // get the first line
while({l.notNil}, {l.postln; l = p.getLine; });    // post until l = nil
p.close;                    // close the pipe to avoid that nasty buildup
)