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

tor*_*vim 2 shell process exec crystal-lang

我需要将 Process.exec (不是 Process.run)的输出作为水晶中的字符串获取。这可以做到吗?

我试过了

Process.exec base, args
Run Code Online (Sandbox Code Playgroud)

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

ign*_*eus 6

正如注释中已经阐明的,您无法捕获使用 执行的进程的输出Process.exec,但有一些方法可以执行进程并捕获其输出。

最直接的一种 - 反引号:

output = `echo "Hello world"`
Run Code Online (Sandbox Code Playgroud)

在更复杂的场景中(例如,您需要分别捕获标准输出和标准错误输出,还需要获取其状态,或者更好地控制其执行),您可以使用如下内容:

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

或者

stdout = IO::Memory.new
status = Process.run("echo", ["Hello world"], output: stdout)
output = stdout.to_s
Run Code Online (Sandbox Code Playgroud)