如何在 crystal-lang 中获取 Process.exec 的输出?
How to get the output of Process.exec in crystal-lang?
我需要将 Process.exec(不是 Process.run)的输出作为 crystal 中的字符串。这能做到吗?
我试过了
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
或
stdout = IO::Memory.new
status = Process.run("echo", ["Hello world"], output: stdout)
output = stdout.to_s
我需要将 Process.exec(不是 Process.run)的输出作为 crystal 中的字符串。这能做到吗?
我试过了
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
或
stdout = IO::Memory.new
status = Process.run("echo", ["Hello world"], output: stdout)
output = stdout.to_s