[英]Run Tortoise SVN command line commands with a hidden window
我有安裝了命令行界面的Tortoise SVN。 安裝路徑是C:\\Program Files\\TortoiseSVN\\bin
,每當我使用任何SVN命令時,都會使用svn.exe
。
我開發了一個Ruby Windows應用程序,它作為后台進程運行。 此應用程序運行命令
svn info "#{path_to_repository}"
正如我所提到的,該命令調用svn.exe
。
問題是, svn.exe
閃爍一個命令提示符並終止,因此如果我為十個不同的存儲庫運行svn info
十次,那么當該命令被開發為及時運行時,屏幕會閃爍十次,屏幕閃爍十次定期。
我需要的是一種通過Tortoise SVN運行SVN命令的方法,而不會使svn.exe
彈出屏幕並關閉。
Ruby有很多在shell中執行命令的方法 ,但是,在GUI App中使用時,所有選項都會出現命令行彈出窗口。
根據您在svn info
中尋找的svn info
,您可以使用WebSVN之類的一個選項,看看您是否可以抓取GUI或從其RSS源獲取數據。 看看這個產品的演示網站 。
如果您有非常特定和最小的需求,那么您還可以選擇構建一個可以使用命令行查詢subversion服務器的小型REST API。 在這種情況下,您可以調用REST API來獲取數據並避免彈出command
窗口。
如果您的時間非常短或者沒有服務器基礎結構來托管REST API,那么您可以考慮創建一個運行套接字服務器的Ruby應用程序,並且可以在從客戶端接收命令時運行shell命令。 然后,您可以使用套接字客戶端使GUI應用程序連接到套接字服務器,並要求服務器應用程序執行svn info
並返回結果。 閱讀構建此類交互式應用程序的教程 。 然后,您可以選擇在同一台PC上並排運行它們。
另一種方法是使用Ruby SVN綁定 。 它可能需要一些挖掘才能使其工作。
這是快速入門代碼:
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應用程序 ,它向由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
命令啟動。
此行為不是特定於Ruby,而是特定於Windows命令行解釋器。 有幾種方法可以解決它。
cmd.exe /C
為前綴的svn
命令,該命令不應該閃爍命令提示符窗口。 其變體是使用start /min
作為前綴。 這在所有情況下都不起作用,我沒有方便的Ruby on Windows檢查。 .vbs
包裝器。 由於.vbs
不由命令行解釋器處理,因此不會創建其窗口。 有關詳細信息,請參閱“ 如何在不啟動'命令窗口'的情況下運行批處理文件? ”。 最好的選擇是使用WinAPI包裝器gem來訪問ShellExecute
函數,這非常靈活:
require 'win32ole' # Create an instance of the Windows Shell object... shell = WIN32OLE.new('Shell.Application') # The shell object's ShellExecute method performs a specified operation on a specified file. The syntax is... shell.ShellExecute(FILE, ARGUMENTS, DIRECTORY, OPERATION, SHOW)
此示例取自“ 使用Windows Shell啟動應用程序和打印文檔 ”,您可以在其中找到更多詳細信息。
為了你的目的,它會是這樣的
shell.ShellExecute('svn.exe', 'info', path_to_repository, 'open', 0)
了解有關ShellExecute
用法的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.