大多時候,Windows桌面級python代碼打包成exe程序後,是沒有那個“顯眼”烏漆嘛黑的DOS窗體。但有時,“懶”得打包python代碼,且直接執行,不想看到DOS窗口怎麼辦?
仔細思考,DOS窗口是Windows操作系統關聯的,所以這是平臺相關性比較緊密的問題。(Linux下的情況應該相似)這種情景下應當考慮使用系統命令shell來執行程序並隱藏命令行窗體。Windows的shell處理又稱“bat”,擴展名爲bat的批處理可以執行系統的各種基礎操作命令。bat文件是在DOS下執行的,沒有隱藏自身程序主體的功能。
所幸的是,Windows的shell可以直接調用系統庫解析執行vbs腳本(Visual Basic Script),而vbs腳本可以實現目標。(以往的Windows平臺可能與BASIC語言有非常緊密的聯繫)
整個過程描述就是:
- 生成shell命令執行python代碼的bat批處理
- 生成執行上述bat程序且隱藏DOS窗體的vbs腳本
- 執行上述vbs腳本
代碼實現:
python_code_exc.bat:
@echo off
cd ..\python_code_dir
python_app_main_entry.pyw
python_code_exc.vbs:
Set vbsshell=WScript.CreateObject("WScript.Shell")
vbsshell.run "python_code_exc.bat", 0
執行python_code_exc.vbs相當於直接執行python_app_main_entry.pyw。這樣間接執行python代碼有什麼用呢?通過命令執行python代碼。當然想要隱藏python代碼最好的方式是混淆。