I am trying to pipe the input/output of three or more subprocesses using uiop:launch-program , equivalent to something like this in the shell: C:\> ipconfig | sort | strings .

I tried getting the output stream of one program and setting it as the input stream of the other, repeatedly until at the last program. Below is my code for three subprocesses, which does not work.

(uiop:run-program "strings" :input (uiop:process-info-output (uiop:launch-program "sort" :input (uiop:process-info-output (uiop:launch-program "ipconfig" :output :stream)) :output :stream)) :output :interactive)

This results in an empty string, when I think it shouldn't.

The interesting thing is that piping between two subprocesses works as expected. Below is my code for two subprocesses, which works.

(uiop:run-program "sort" :input (uiop:process-info-output (uiop:launch-program "ipconfig" :output :stream)) :output :string)

This returns a non-empty string, which I expect.

Please help me make my dreams of piping three programs together come true.