Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

steel/process

child-stderr

Get a handle to the stderr handle of the child process. The process must have been started with the with-stderr-piped option for this to be available, otherwise stderr will be inherited. This will return false if the handle has already been consumed.

(child-stderr subprocess) -> (or input-port? #false)

subprocess : ChildProcess?

child-stdin

Get a handle to the stdin handle of the child process. The process must have been started with the with-stdin-piped option for this to be available, otherwise stdin will be inherited. This will return false if the handle has already been consumed.

(child-stdout subprocess) -> (or input-port? #false)

subprocess : ChildProcess?

child-stdout

Get a handle to the stdout handle of the child process. The process must have been started with the with-stdout-piped option for this to be available, otherwise stdout will be inherited. This will return false if the handle has already been consumed.

(child-stdout subprocess) -> (or output-port? #false)

subprocess : ChildProcess?

(define handle (~> (command "/bin/ls" '())
                   with-stdout-piped
                   spawn-process
                   unwrap-ok))
(read-port-to-string (child-stdout handle)) ;; The resulting string

command

Create a CommandBuilder from a command and a list of arguments. Used to spawn a subprocess.

(command cmd args) -> CommandBuilder?

  • cmd : string?
  • args : (listof string?)
> (spawn-process (command "echo" (list "hello" "world")))

kill

Terminate the subprocess.

(subprocess-kill subprocess)

subprocess : ChildProcess?

process-wait

Alias of wait.

set-current-dir!

Alias of with-current-dir.

set-env-var!

Alias of with-env-var.

set-piped-stdout!

Equivalent to set-stdout-piped!: connects the spawned child’s stdin, stdout, and stderr to pipes. Returns the command builder.

(set-piped-stdout! process) -> CommandBuilder?

  • process : CommandBuilder?

set-stdout-piped!

Configures the command builder so that the spawned child’s stdin, stdout, and stderr are all connected to pipes, letting the parent process read from and write to them. Returns the command builder.

(set-stdout-piped! process) -> CommandBuilder?

  • process : CommandBuilder?

spawn-process

Spawn the given process. Returns a result indicating whether the process was able to be spawned.

(spawn-process process) -> (Result? ChildProcess?)

  • process : CommandBuilder?
> (require "steel/result")
> (define spawned (spawn-process (command "/bin/ls" '()))) ;; => (Ok #<steel::primitives::process::ChildProcess>)
> (define child (unwrap-ok spawned))

subprocess-kill

Alias of kill.

wait

Wait for the subprocess to finish. Returns a result with the status code of the awaited subprocess.

(wait process) -> (Result? int?)

  • process : ChildProcess?
> (~> (command "echo" (list "hello"))
      spawn-process
      unwrap-ok
      wait)

wait->stdout

Wait for the subprocess to finish, capturing its stdout. Returns a result holding everything the process wrote to stdout, decoded as a UTF-8 string. The process must have been started with stdout piped (for example via with-stdout-piped) for this to capture any output.

(wait->stdout process) -> (Result? string?)

  • process : ChildProcess?
> (~> (command "echo" (list "hello"))
      with-stdout-piped
      spawn-process
      unwrap-ok
      wait->stdout)

which

Searches the directories listed on the PATH environment variable for the given executable, returning its absolute path as a string, or #false if it cannot be found.

(which binary) -> (or string? #false)

  • binary : string?
> (which "ls") ;; => "/bin/ls"
> (which "some-nonexistent-binary") ;; => #false

with-cleared-env-vars

Removes all environment variables for the child.

(with-cleared-env-vars process) -> CommandBuilder?

  • process - CommandBuilder?
> (define pb (command "echo" (list "hello")))
> (~> (command "echo" (list "hello"))
      (with-cleared-env-vars "FOO")
      spawn-process
      unwrap-ok
      wait)

with-current-dir

Sets the current directory for the child. set-current-dir! is an alias.

(with-current-dir process dir) -> CommandBuilder?

  • process - CommandBuilder?
  • dir - string?
> (define pb (command "echo" (list "hello")))
> (with-current-dir pb "/home/foo")
> (~> (command "echo" (list "hello"))
      (with-current-dir "/home/foo")
      spawn-process
      unwrap-ok
      wait)

with-env-var

Sets an environment variable for the child. set-env-var! is an alias.

(with-env-var process key value) -> CommandBuilder?

  • process - CommandBuilder?
  • key - string?
  • value - string?
> (define pb (command "echo" (list "hello")))
> (~> (command "echo" (list "hello"))
      (with-env-var "FOO" "BAR")
      spawn-process
      unwrap-ok
      wait)

with-stderr

Redirect stderr from the process to the given port

(with-stderr process port) -> CommandBuilder?

  • process : CommandBuilder?
  • port : (and output-port? file-port?)
> (define output (open-output-file "test.txt"))
> (~> (command "echo" (list "hello"))
      (with-stderr output)
      spawn-process
      unwrap-ok
      wait)

with-stderr-piped

Constructs a pipe to be arranged to connect to stderr.

(with-stderr-piped process) -> CommandBuilder?

  • process : CommandBuilder?
> (~> (command "echo" (list "hello"))
      with-stderr-piped
      spawn-process
      unwrap-ok
      wait)

with-stdin

Redirect stdin from the process to the given port

(with-stdin process port) -> CommandBuilder?

  • process : CommandBuilder?
  • port : (and input-port? file-port?)
> (define output (open-input-file "test.txt"))
> (~> (command "echo" (list "hello"))
      (with-stdin output)
      spawn-process
      unwrap-ok
      wait)

with-stdin-piped

Constructs a pipe to be arranged to connect to stdin.

(with-stdin-piped process) -> CommandBuilder?

  • process : CommandBuilder?
> (~> (command "echo" (list "hello"))
      with-stdin-piped
      spawn-process
      unwrap-ok
      wait)

with-stdout

Redirect stdout from the process to the given port

(with-stdout process port) -> CommandBuilder?

  • process : CommandBuilder?
  • port : (and output-port? file-port?)
> (define output (open-output-file "test.txt"))
> (~> (command "echo" (list "hello"))
      (with-stdout output)
      spawn-process
      unwrap-ok
      wait)

with-stdout-piped

Constructs a pipe to be arranged to connect to stdout.

(with-stdout-piped process) -> CommandBuilder?

  • process : CommandBuilder?
> (~> (command "echo" (list "hello"))
      with-stdout-piped
      spawn-process
      unwrap-ok
      wait)

without-env-var

Removes an environment variable for the child.

(with-env-var process key) -> CommandBuilder?

  • process - CommandBuilder?
  • key - string?
> (define pb (command "echo" (list "hello")))
> (~> (command "echo" (list "hello"))
      (without-env-var "FOO")
      spawn-process
      unwrap-ok
      wait)

ChildProcess?

CommandBuilder?

command-builder?

subprocess?