Shell 如何在crystal lang中获取Process.exec的输出?

Shell 如何在crystal lang中获取Process.exec的输出?,shell,process,exec,crystal-lang,Shell,Process,Exec,Crystal Lang,我需要以crystal中的字符串形式获取Process.exec(而不是Process.run)的输出。这能做到吗 我试过了 Process.exec base, args 但它只是把它放在控制台上。我想把它放在一个变量中。正如在注释中已经阐明的那样,您不能使用process.exec捕获流程执行的输出,但是有一些方法可以执行流程并捕获其输出 最简单的单回击: output = `echo "Hello world"` 在更复杂的场景中(例如,您需要分别捕获标准输出和标准错误输出,还需要获取

我需要以crystal中的字符串形式获取Process.exec(而不是Process.run)的输出。这能做到吗

我试过了

Process.exec base, args

但它只是把它放在控制台上。我想把它放在一个变量中。

正如在注释中已经阐明的那样,您不能使用
process.exec
捕获流程执行的输出,但是有一些方法可以执行流程并捕获其输出

最简单的单回击:

output = `echo "Hello world"`
在更复杂的场景中(例如,您需要分别捕获标准输出和标准错误输出,还需要获取其状态,或者对其执行进行更大的控制),您可以使用以下方式:

stdout = IO::Memory.new
process = Process.new("echo", ["Hello world"], output: stdout)
status = process.wait
output = stdout.to_s

Process.exec
将用您指定的进程替换当前进程(您正在运行的程序)。所以不,这不是你想要的。为什么不使用
Process.run
?@bew好吧,我正在
Process.exec
内部
Process.fork
。我希望捕获
Process.fork
的输出。然后需要一些管道(如果需要std{in,out,err},可以使用
IO.pipe
创建一个管道)。如果您需要在执行流程之前执行自定义操作,我建议您阅读如何实现
process.run
,以查看使用管道控制流程并获取其输出的示例!在这里