- 問題描述:
歷史、個人以及種種原因荔烧,導致必須要在我的電腦中運行某一個bat吱七,才可以讓其它的同事正常的使用某一個工具。而該工具版本的發(fā)布頻率可以用電動小馬達來形容鹤竭,總之踊餐,就是每天我需要花20%左右的時間來處理這個事情。 - 迫切需求:
- 希望可以讓其它同事遠程運行我電腦中的bat臀稚,解放我的時間以便用來做其它更有“意義”的事情吝岭。
- 希望把bat的運行結(jié)果顯示在網(wǎng)頁上
- 希望同時只能處理一個bat的調(diào)用請求
- 希望后臺服務器是靜默運行的
- 解決思路
用web來實現(xiàn),即在本地開一個web服務器吧寺,處理其它人的請求(有點殺雞用牛刀的感覺) - 需求解決
- 先是試著用sinatra窜管,確實更適合,但之前從沒用過稚机,遇到就一點小問題果斷縮了幕帆,所以改成用rails(好吧,確實用了把牛刀)赖条,通過在controller中調(diào)用系統(tǒng)命令
system "xxx.bat"
失乾,可以解決第一個需求常熙。 - 但
system "xxx.bat"
的返回結(jié)果是false或者true
,無法把bat的運行結(jié)果顯示在網(wǎng)頁上碱茁,所以改用%x(xxx.bat)
裸卫,然而發(fā)現(xiàn)返回的內(nèi)容顯示為亂碼,所以還要換編碼纽竣,然后返回的內(nèi)容在網(wǎng)頁上顯示還不會自動換行墓贿,最后就改成了這樣:%x(xxx.bat).encode('utf-8', 'gb2312').split("\n")
,得到一個數(shù)組退个,然后在view中處理顯示募壕。 - 還需要同時只處理一個bat的調(diào)用請求,在controller中直接用cmd命令判斷
system "tasklist|findstr /i /c:\"running_process_name\""
语盈,如果返回值為true舱馅,那么就返回給view一個提示,不做調(diào)用bat的處理刀荒。 - 試了很多方法代嗤,想讓rails服務器的窗口在windows下后臺運行。首先是用SrvanyUI來注冊了一個服務缠借,發(fā)現(xiàn)會經(jīng)常性的出錯干毅,原因不明,后來就想靜默啟動泼返,先是創(chuàng)建了一個
start.bat
用來處理一些意外的情況以及啟動服務器硝逢,然后新建了一個start.vbe的文件,內(nèi)容如下:
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c start.bat",0
最后把vbe文件設置成啟動運行绅喉。
算是告一段落渠鸽。
遺留問題:
- 只能等bat運行完以后才能看到運行結(jié)果,不能即時看運行結(jié)果柴罐。
- rails啟動的還是開發(fā)環(huán)境徽缚,不過極小范圍使用,還算可以接受革屠。
- 我覺得用sinatra應該更好凿试。。似芝∧峭瘢或許python更適合。党瓮。吧恃。
- 建議windows下安裝rails時,建議用
gem install rails --no-ri --no-doc
麻诀,另外安裝rails時需要先安裝devkit
這個工具在官網(wǎng)可以下載到痕寓。