請問有什麼方法可以同時執行node.js + mongodb 在win平台下,但好像只能分成兩個視窗各自跑。還是有辦法寫成shell,讓他去執行兩個跑背景,但有辦法偵測shell關閉時,就同時關閉node.js和mongodb?可以的話不要powershell,有些舊電腦不支援。
我建議是在linux下跑背景,service是不會跳出視窗的,要用到的時候再開terminal去執行指令
此外我沒記錯的話,mongodb在win下不是會背景執行,不會跳視窗?
會跳視窗的只有nodejs吧
真的要的話可以試試這種土炮的方法
不過我在查相關資料的時候
幾乎每個都說 'you shouldn't do this' XD
const { exec } = require('child_process');
const command = 'mongod --dbpath D:\\datatbase';
async function main() {
const openMongoDB = exec(command, (e, stdout, std) => {
if (e) {
console.log(e)
}
});
await sleep(10000);
console.log('has wait for database completed for 10s');
//因為沒辦法拿到mongodb開啟成功的callback 所以只好等個10秒之類的
// next to do
};
function sleep(time) { // Sleep for ${time} ms
return new Promise((resolve) => {setTimeout(() => {resolve()}, time)});
};
main();
大概的方向應該就這樣
我有個想法...
就是用pyautogui控制鍵盤代替手動輸入,範例如下:
auto-bot-call-2cmd.py
import pyautogui as pau
#第一個cmd視窗
pau.hotkey('winleft','r')
pau.typewrite('cmd')
pau.press('enter')
pau.typewrite('ping 168.95.1.1 -t')
pau.press('enter')
#第二個cmd視窗
pau.hotkey('winleft','r')
pau.typewrite('cmd')
pau.press('enter')
pau.typewrite('ping 168.95.192.1 -t')
pau.press('enter')
執行:
python auto-bot-call-2cmd.py
就會看到電腦自己動起來開了兩個cmd並輸入一些東西在跑
pau.typewrite('ping 168.95.1.1 -t')
裡面換成你要啟動node跟mongodb的字串
最後確定功能沒問題再用pyinstaller把它打包成 exe檔就可以在多台電腦做同樣的事了
cmd跟[win]-[r]是舊windows就有的東西,跑起來應該不會有問題。
註:
pyautogui安裝時如果你的python版本太新的話可能需要到
https://pypi.org/project/PyAutoGUI/0.9.30/#files
手動下載安裝
pyautogui還有蠻多不錯的功能 樓主可以到這邊研究:
https://pyautogui.readthedocs.io/en/latest/index.html
大大我不會寫python orz...,簡單來說我用py去寫,轉出exe,之後跑個exe就可以了嗎,還是說都是跑.py,這樣還要安裝python。上方大大的方法其實差異是在因為取不到真正的執行mongodb完成的callback,用py寫應該也會有同樣的問題?
你先上網搜一下"Anaconda3 教學"照做先安裝好Anaconda3就等於有Python的環境了,以這個demo來說需要另外安裝pyinstaller跟pyautogui兩個套件,
pyautogui在上面的本文有連結,不知怎麼安裝再詢問,
pyinstaller安裝很簡單
https://medium.com/pyladies-taiwan/python-%E5%B0%87python%E6%89%93%E5%8C%85%E6%88%90exe%E6%AA%94-32a4bacbe351
安裝好之後在c槽底下新增一個資料夾命名為"testGui",
然後新增一個文字檔命名為"my-first-app.py"
貼入上面本文裡面的程式碼並存檔。
要測試有沒有成功就點"開始->程式集"裡面的"Anaconda3 prompt",在命令列輸入
cd C:\testGui [enter]
python my-first-app.py [enter]
到這邊如果一切順利的話就會跳出兩個cmd視窗在ping 192.168....
如果這裡有報錯,再看是什麼出錯去修正到不會報錯正常執行為止。
到能正常執行就剩下把my-first-app.py轉exe的動作,這非常簡單就一行:
pyinstaller -F .\my-first-app.py
等它跑完如果一切順利就會在dist資料夾裡面看到my-first-app.exe
如果沒辦法順利轉exe可能要再看什麼出錯並作修正,
像我剛才轉exe出現
"Exception: Cannot find PyQt5 plugin directories when using Pyinstaller despite PyQt5 not even being used"
參考下列文章
https://stackoverflow.com/questions/39736000/exception-cannot-find-pyqt5-plugin-directories-when-using-pyinstaller-despite-p
pip uninstall pyinstaller
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
然後再重新執行
pyinstaller -F .\my-first-app.py 就成功了。
成功之後你就可以把exe拷貝到別台電腦測試看看,加油~
我比較好奇的是,真的有每台電腦都要裝mongodb的必要性?
去找些像是sqlite、lowdb之類的single file db來開發會不會省很多事?