how can i discard the output of a babashka.process without reading it into memory?
i see that there's :out but i'm not sure how to set up a object that just discards the output
you could do :out-file "/dev/null" - I should add a better explicit option for this
are you looking for NullOutputStream
yes i am!
but I should really put this behind :discard, I'll do it now
although yeah Borkdude's solutions are much more elegant :)
user=> (import '[java.lang ProcessBuilder$Redirect])
java.lang.ProcessBuilder$Redirect
user=> ProcessBuilder$Redirect/DISCARD
#object[java.lang.ProcessBuilder$Redirect$3 0x1626e651 "WRITE"]and even then it was NullInputStream anyway lol, that naming always trips me up. Or is it NullReader?
oh lol, that doesn't work yet.
user=> (babashka.process/process {:out ProcessBuilder$Redirect/DISCARD :err :inherit} "echo 'lol'")
{:proc #object[java.lang.ProcessImpl 0xc816d52 "Process[pid=23158, exitValue=0]"], :exit nil, :in #object[java.lang.ProcessImpl$ProcessPipeOutputStream 0x1a2c1ea3 "java.lang.ProcessImpl$ProcessPipeOutputStream@1a2c1ea3"], :out #object[clojure.core$future_call$reify__8578 0x37f44d7b {:status :failed, :val #error {
:cause "No method in multimethod 'do-copy' for dispatch value: [java.lang.ProcessImpl$ProcessPipeInputStream java.lang.ProcessBuilder$Redirect$3]"it treats the thing like a file, which is wrong. so :out-file "/dev/null" for now
nullInputStream doesn't work either
flower configure: error: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: No method in multimethod 'do-copy' for dispatch value: [java.lang.ProcessImpl$ProcessPipeInputStream flower.cmd$configure$invoke__InputStream_nullInputStream__11796]
Caused by: java.lang.IllegalArgumentException: No method in multimethod 'do-copy' for dispatch value: [java.lang.ProcessImpl$ProcessPipeInputStream flower.cmd$configure$invoke__InputStream_nullInputStream__11796]I just posted that :)
oh sorry, misread
@jyn514 doesn't this work?
@(babashka.process/process {:out (java.io.OutputStream/nullOutputStream) :err :inherit} "echo 'lol'")seems to work here
:dude2
{:proc #object[java.lang.ProcessImpl 0x7574b7da "Process[pid=25297, exitValue=0]"], :exit 0, :in #object[java.lang.ProcessImpl$ProcessPipeOutputStream 0x6f4d5a83 "java.lang.ProcessImpl$ProcessPipeOutputStream@6f4d5a83"], :out #object[java.io.OutputStream$1 0x290e1b73 "java.io.OutputStream$1@290e1b73"], :err #object[java.lang.ProcessBuilder$NullInputStream 0xd4186a8 "java.lang.ProcessBuilder$NullInputStream@d4186a8"], :prev nil, :cmd ["bb" "-e" "(prn :dude1) (binding [*out* *err*] (println :dude2))"]}oops, forgot to post the code, posted just the output:
user=> @(babashka.process/process {:out (java.io.OutputStream/nullOutputStream) :err :inherit} "bb" "-e" "(prn :dude1) (binding [*out* *err*] (println :dude2))")something feels wrong about this
ser=> (slurp (:out @(babashka.process/process {} "bb -e 1")))
"1\r\n"
user=> (slurp (:out @(babashka.process/process {:out (java.io.OutputStream/nullOutputStream)} "bb -e 1")))
java.lang.IllegalArgumentException: Cannot open <#object[java.io.OutputStream$1 0x4b91b0a6 "java.io.OutputStream$1@4b91b0a6"]> as an InputStream. [at <repl>:34:1]
user=> (slurp (:out @(babashka.process/process {:out (java.io.InputStream/nullInputStream)} "bb -e 1")))
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: No method in multimethod 'do-copy' for dispatch value: [java.io.BufferedInputStream java.io.InputStream$1] [at <repl>:35:14]it doesn't work for me in any case
(run-non-fatal {:out OutputStream/nullOutputStream} "ninja -t cleandead")
flower configure: error: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: No method in multimethod 'do-copy' for dispatch value: [java.lang.ProcessImpl$ProcessPipeInputStream flower.cmd$configure$invoke__OutputStream_nullOutputStream__11796]
Caused by: java.lang.IllegalArgumentException: No method in multimethod 'do-copy' for dispatch value: [java.lang.ProcessImpl$ProcessPipeInputStream flower.cmd$configure$invoke__OutputStream_nullOutputStream__11796](this is a wrapper around ps/shell)
ok just use :out-file "/dev/null" for now and post an issue about other stuff that you think is incorrect, I gotta run now
@jyn514
https://github.com/babashka/process Clojure library for shelling out / spawning sub-processes
0.6.24 (2025-12-07)
• https://github.com/babashka/process/issues/181: support :discard or ProcessBuilder$Redirect as :out and :err options
amazing, ty!