- 問題描述:
歷史、個人以及種種原因,導(dǎo)致必須要在我的電腦中運行某一個bat,才可以讓其它的同事正常的使用某一個工具。而該工具版本的發(fā)布頻率可以用電動小馬達來形容,總之,就是每天我需要花20%左右的時間來處理這個事情。 - 迫切需求:
- 希望可以讓其它同事遠程運行我電腦中的bat,解放我的時間以便用來做其它更有“意義”的事情。
- 希望把bat的運行結(jié)果顯示在網(wǎng)頁上
- 希望同時只能處理一個bat的調(diào)用請求
- 希望后臺服務(wù)器是靜默運行的
- 解決思路
用web來實現(xiàn),即在本地開一個web服務(wù)器,處理其它人的請求(有點殺雞用牛刀的感覺) - 需求解決
- 先是試著用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服務(wù)器的窗口在windows下后臺運行。首先是用SrvanyUI來注冊了一個服務(wù),發(fā)現(xiàn)會經(jīng)常性的出錯,原因不明,后來就想靜默啟動,先是創(chuàng)建了一個
start.bat用來處理一些意外的情況以及啟動服務(wù)器,然后新建了一個start.vbe的文件,內(nèi)容如下:
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c start.bat",0
最后把vbe文件設(shè)置成啟動運行。
算是告一段落。
遺留問題:
- 只能等bat運行完以后才能看到運行結(jié)果,不能即時看運行結(jié)果。
- rails啟動的還是開發(fā)環(huán)境,不過極小范圍使用,還算可以接受。
- 我覺得用sinatra應(yīng)該更好。。。或許python更適合。。。
- 建議windows下安裝rails時,建議用
gem install rails --no-ri --no-doc,另外安裝rails時需要先安裝devkit這個工具在官網(wǎng)可以下載到。