我有一个名为 test.sh 的 shell 脚本。如何从 Ruby 触发 test.sh?
我希望 test.sh 作为后台进程运行,这在 Ruby 中意味着它是一个异步调用。
STDERR 和 STDOUT 也需要写入特定文件。
有任何想法吗?
我有一个名为 test.sh 的 shell 脚本。如何从 Ruby 触发 test.sh?
我希望 test.sh 作为后台进程运行,这在 Ruby 中意味着它是一个异步调用。
STDERR 和 STDOUT 也需要写入特定文件。
有任何想法吗?
@TanzeebKhalili 的回答有效,但您可能会考虑Kernel.spawn(),它不会等待进程返回:
pid = spawn("./test.sh")
Process.detach(pid)
请注意,根据文档,无论您是使用还是spawn()
手动fork()
and ,您都应该在退出之前system()
获取 PID 和。Process.detach()
Process.wait()
关于重定向标准错误和输出,这很容易spawn()
:
pid = spawn("./test.sh", :out => "test.out", :err => "test.err")
Process.detach(pid)
试试这个:
Process.fork { system "./test.sh" }
不适用于 Windows,您可以使用线程。
我认为IO.popopen
这里也值得一提。像这样的东西会附加命令多次运行的输出。到stdout.log
和stderr.log
open('stdout.log', 'a') { |file|
file.puts(
IO.popen(["./test.sh"], :err => ["stderr.log", "a"]) { |result|
result.read
}
)
end