Julia:运行 给定时间的外部进程并捕获其输出

Julia: Run an external process for a given amount of time and capture its output

我想 运行 Julia 中的外部进程持续给定的时间(比如 10 秒)并捕获其输出。 我尝试了类似 readchomp(`timeout 5 sleep 10`) 的方法(用任意外部进程替换 sleep 10)。但是,如果进程被 timeout 杀死,则会抛出 ProcessFailedException 并且在它被杀死之前我无法读取它生成的程序的输出。

run 仅在 wait = true 时抛出异常(默认情况下)。您需要将该 kwarg 设置为 false,然后在此过程中手动 wait,同时将 stdout 重定向到例如IOBuffer 通过 pipeline:

shell> cat loop.sh
#!/bin/bash

for i in {1..10}; do
    echo $i
    sleep 1
done


julia> b = IOBuffer()
IOBuffer(data=UInt8[...], readable=true, writable=true, seekable=true, append=false, size=0, maxsize=Inf, ptr=1, mark=-1)

julia> p = run(pipeline(`timeout 5 ./loop.sh`, stdout = b), wait = false); wait(p)

julia> p
Process(`timeout 5 ./loop.sh`, ProcessExited(124))

julia> String(take!(b))
"1\n2\n3\n4\n5\n"