- 問題描述:
歷史、個(gè)人以及種種原因,導(dǎo)致必須要在我的電腦中運(yùn)行某一個(gè)bat,才可以讓其它的同事正常的使用某一個(gè)工具。而該工具版本的發(fā)布頻率可以用電動(dòng)小馬達(dá)來形容,總之,就是每天我需要花20%左右的時(shí)間來處理這個(gè)事情。 - 迫切需求:
- 希望可以讓其它同事遠(yuǎn)程運(yùn)行我電腦中的bat,解放我的時(shí)間以便用來做其它更有“意義”的事情。
- 希望把bat的運(yùn)行結(jié)果顯示在網(wǎng)頁上
- 希望同時(shí)只能處理一個(gè)bat的調(diào)用請(qǐng)求
- 希望后臺(tái)服務(wù)器是靜默運(yùn)行的
- 解決思路
用web來實(shí)現(xiàn),即在本地開一個(gè)web服務(wù)器,處理其它人的請(qǐng)求(有點(diǎn)殺雞用牛刀的感覺) - 需求解決
- 先是試著用sinatra,確實(shí)更適合,但之前從沒用過,遇到就一點(diǎn)小問題果斷縮了,所以改成用rails(好吧,確實(shí)用了把牛刀),通過在controller中調(diào)用系統(tǒng)命令
system "xxx.bat",可以解決第一個(gè)需求。 - 但
system "xxx.bat"的返回結(jié)果是false或者true,無法把bat的運(yùn)行結(jié)果顯示在網(wǎng)頁上,所以改用%x(xxx.bat),然而發(fā)現(xiàn)返回的內(nèi)容顯示為亂碼,所以還要換編碼,然后返回的內(nèi)容在網(wǎng)頁上顯示還不會(huì)自動(dòng)換行,最后就改成了這樣:%x(xxx.bat).encode('utf-8', 'gb2312').split("\n"),得到一個(gè)數(shù)組,然后在view中處理顯示。 - 還需要同時(shí)只處理一個(gè)bat的調(diào)用請(qǐng)求,在controller中直接用cmd命令判斷
system "tasklist|findstr /i /c:\"running_process_name\"",如果返回值為true,那么就返回給view一個(gè)提示,不做調(diào)用bat的處理。 - 試了很多方法,想讓rails服務(wù)器的窗口在windows下后臺(tái)運(yùn)行。首先是用SrvanyUI來注冊(cè)了一個(gè)服務(wù),發(fā)現(xiàn)會(huì)經(jīng)常性的出錯(cuò),原因不明,后來就想靜默啟動(dòng),先是創(chuàng)建了一個(gè)
start.bat用來處理一些意外的情況以及啟動(dòng)服務(wù)器,然后新建了一個(gè)start.vbe的文件,內(nèi)容如下:
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c start.bat",0
最后把vbe文件設(shè)置成啟動(dòng)運(yùn)行。
算是告一段落。
遺留問題:
- 只能等bat運(yùn)行完以后才能看到運(yùn)行結(jié)果,不能即時(shí)看運(yùn)行結(jié)果。
- rails啟動(dòng)的還是開發(fā)環(huán)境,不過極小范圍使用,還算可以接受。
- 我覺得用sinatra應(yīng)該更好。。?;蛟Spython更適合。。。
- 建議windows下安裝rails時(shí),建議用
gem install rails --no-ri --no-doc,另外安裝rails時(shí)需要先安裝devkit這個(gè)工具在官網(wǎng)可以下載到。