Ruby has numerous way of executing command in shell,然而,在 GUI 应用程序中使用时,似乎会出现一个命令行弹出窗口,其中包含所有选项。
根据您在svn info 中查找的详细信息,您可以使用WebSVN 之类的选项,看看您是否可以抓取GUI 或从其RSS 提要中获取数据。 Take a look at demo site of this product.
如果您有非常具体和最小的需求,那么您也可以选择构建一个小型 REST API,它可以使用命令行查询 subversion 服务器。在这种情况下,您可以调用该 REST API 来获取数据并避免弹出command 窗口。
如果你真的时间很紧或者没有服务器基础设施来托管 REST API,那么你可以考虑创建一个运行套接字服务器的 Ruby 应用程序,并且可以在接收来自客户端的命令时运行 shell 命令。然后,您可以让您的 GUI App 使用套接字客户端连接到套接字服务器,并要求服务器应用程序执行 svn info 并返回结果。 Go through the tutorial on building such interacting apps。然后,您可以选择在同一台 PC 上并排运行它们。
另一种选择是使用Ruby SVN bindings。它可能需要一些 digging around 才能使其工作。
这里是快速入门代码:
server.rb - 一个 ruby TCP 服务器,接受命令并在 shell 中执行它们
require 'socket'
server = TCPServer.open(2000) # Socket to listen on port 2000
puts "Listening now #{server.addr}"
loop {
Thread.start(server.accept) do |client|
cmd = client.gets
puts "Processing #{cmd} from #{client.peeraddr}"
IO.popen(cmd) { |s| result = [];
while (line = s.gets) do
client.puts line.chop
end;
}
client.close
end
}
app.rb 一个Shoes GUI app 向server.rb 运行的TCP 服务器发出svn info 命令
需要“套接字”
Shoes.app {
stack do
@push = button "Get SVN Info"
@note = para ""
end
@push.click {
hostname = 'localhost'
port = 2000
result = []
s = TCPSocket.open(hostname, port)
s.puts "svn info trunk/backend"
while line = s.gets
result << line.chop
end
s.close
@note.replace result.join("\n")
}
}
app.rb 应该使用shoes app.rb 命令启动。