Python創(chuàng)建exe運行器和截圖工具的示例詳解
在今天的博客中,我們將探討如何使用Python和wxPython創(chuàng)建一個強大而實用的桌面應用程序。這個應用程序可以遍歷指定文件夾中的所有EXE文件,并提供運行這些文件和自動截圖的功能。無論你是系統(tǒng)管理員、軟件測試人員,還是僅僅對自動化工具感興趣的開發(fā)者,這個項目都會給你帶來啟發(fā)。
C:\pythoncode\new\runfolderexeandsnapshot.py
功能概述
我們的應用程序具有以下主要功能:
- 選擇文件夾并遍歷其中的所有EXE文件(包括子文件夾)
- 在列表框中顯示找到的EXE文件
- 雙擊列表項運行對應的EXE文件
- 一鍵運行所有找到的EXE文件
- 自動為每個運行的程序截圖
- 將截圖以原EXE文件名保存在指定位置
技術(shù)棧
為了實現(xiàn)這些功能,我們使用了以下Python庫:
- wxPython: 用于創(chuàng)建圖形用戶界面
- os: 用于文件系統(tǒng)操作
- subprocess: 用于運行外部程序
- pyautogui: 用于屏幕截圖
- PIL (Python Imaging Library): 用于圖像處理
全部代碼
import wx import os import subprocess import pyautogui from PIL import Image class MainFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title='EXE Runner and Screenshot Tool') panel = wx.Panel(self) self.list_box = wx.ListBox(panel, pos=(5, 35), size=(350, 300), style=wx.LB_SINGLE) self.list_box.Bind(wx.EVT_LISTBOX_DCLICK, self.on_dclick) select_btn = wx.Button(panel, label='選擇文件夾', pos=(5, 5), size=(100, 25)) select_btn.Bind(wx.EVT_BUTTON, self.on_select) run_all_btn = wx.Button(panel, label='運行全部', pos=(110, 5), size=(100, 25)) run_all_btn.Bind(wx.EVT_BUTTON, self.on_run_all) self.SetSize((360, 375)) self.Centre() def on_select(self, event): dlg = wx.DirDialog(self, "選擇一個文件夾", style=wx.DD_DEFAULT_STYLE) if dlg.ShowModal() == wx.ID_OK: self.folder_path = dlg.GetPath() self.exe_files = self.get_exe_files(self.folder_path) self.list_box.Set(self.exe_files) dlg.Destroy() def get_exe_files(self, folder): exe_files = [] for root, dirs, files in os.walk(folder): for file in files: if file.endswith('.exe'): exe_files.append(os.path.join(root, file)) return exe_files def on_dclick(self, event): index = event.GetSelection() self.run_exe(self.exe_files[index]) def on_run_all(self, event): for exe in self.exe_files: self.run_exe(exe) def run_exe(self, exe_path): try: subprocess.Popen(exe_path) wx.Sleep(2) # 等待程序啟動 self.take_screenshot(exe_path) except Exception as e: wx.MessageBox(f"運行 {exe_path} 時出錯: {str(e)}", "錯誤", wx.OK | wx.ICON_ERROR) def take_screenshot(self, exe_path): screenshot = pyautogui.screenshot() exe_name = os.path.splitext(os.path.basename(exe_path))[0] screenshot_folder = os.path.join(os.path.dirname(exe_path), "screenshot") if not os.path.exists(screenshot_folder): os.makedirs(screenshot_folder) screenshot_path = os.path.join(screenshot_folder, f"{exe_name}.png") screenshot.save(screenshot_path) if __name__ == '__main__': app = wx.App() frame = MainFrame() frame.Show() app.MainLoop()
代碼解析
讓我們深入了解代碼的關(guān)鍵部分:
1. 用戶界面
我們使用wxPython創(chuàng)建了一個簡潔的用戶界面,包含一個列表框和兩個按鈕:
class MainFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title='EXE Runner and Screenshot Tool') panel = wx.Panel(self) self.list_box = wx.ListBox(panel, pos=(5, 35), size=(350, 300), style=wx.LB_SINGLE) self.list_box.Bind(wx.EVT_LISTBOX_DCLICK, self.on_dclick) select_btn = wx.Button(panel, label='選擇文件夾', pos=(5, 5), size=(100, 25)) select_btn.Bind(wx.EVT_BUTTON, self.on_select) run_all_btn = wx.Button(panel, label='運行全部', pos=(110, 5), size=(100, 25)) run_all_btn.Bind(wx.EVT_BUTTON, self.on_run_all)
2. 文件遍歷
我們使用os.walk()來遞歸遍歷文件夾及其子文件夾,查找所有的EXE文件:
def get_exe_files(self, folder): exe_files = [] for root, dirs, files in os.walk(folder): for file in files: if file.endswith('.exe'): exe_files.append(os.path.join(root, file)) return exe_files
3. 運行EXE文件
我們使用subprocess.Popen()來運行EXE文件:
def run_exe(self, exe_path): try: subprocess.Popen(exe_path) wx.Sleep(2) # 等待程序啟動 self.take_screenshot(exe_path) except Exception as e: wx.MessageBox(f"運行 {exe_path} 時出錯: {str(e)}", "錯誤", wx.OK | wx.ICON_ERROR)
4. 屏幕截圖
我們使用pyautogui來捕獲屏幕截圖,并使用PIL來保存圖像:
def take_screenshot(self, exe_path): screenshot = pyautogui.screenshot() exe_name = os.path.splitext(os.path.basename(exe_path))[0] screenshot_folder = os.path.join(os.path.dirname(exe_path), "screenshot") if not os.path.exists(screenshot_folder): os.makedirs(screenshot_folder) screenshot_path = os.path.join(screenshot_folder, f"{exe_name}.png") screenshot.save(screenshot_path)
潛在應用場景
這個工具可以在多種場景下發(fā)揮作用:
軟件測試: 自動運行多個程序并捕獲截圖,可以大大提高測試效率。
系統(tǒng)管理: 快速查看和運行系統(tǒng)中的可執(zhí)行文件,對系統(tǒng)管理員很有幫助。
軟件開發(fā): 在開發(fā)過程中快速測試和記錄多個可執(zhí)行文件的運行狀態(tài)。
教育: 作為一個教學工具,展示如何使用Python創(chuàng)建實用的桌面應用程序。
改進空間
雖然這個工具已經(jīng)相當實用,但仍有一些可以改進的地方:
- 添加進度條,顯示當前正在運行的程序和截圖進度。
- 實現(xiàn)更靈活的截圖時間控制,因為不同程序可能需要不同的啟動時間。
- 添加選項來自動關(guān)閉運行的程序。
- 實現(xiàn)更robust的錯誤處理和日志記錄機制。
- 添加對非EXE文件的支持,如批處理文件或其他可執(zhí)行文件。
運行結(jié)果
到此這篇關(guān)于Python創(chuàng)建exe運行器和截圖工具的示例詳解的文章就介紹到這了,更多相關(guān)Python創(chuàng)建exe運行器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python logging管理不同級別log打印和存儲實例
這篇文章主要介紹了Python logging管理不同級別log打印和存儲實例,具有一定借鑒價值,需要的朋友可以參考下2018-01-01Python調(diào)用百度根據(jù)經(jīng)緯度查詢地址的示例代碼
今天小編就為大家分享一篇Python調(diào)用百度根據(jù)經(jīng)緯度查詢地址的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07詳解Python NumPy中矩陣和通用函數(shù)的使用
在NumPy中,矩陣是ndarray的子類,與數(shù)學概念中的矩陣一樣,NumPy中的矩陣也是二維的,可以使用 mat 、 matrix 以及 bmat 函數(shù)來創(chuàng)建矩陣。本文將詳細講解NumPy中矩陣和通用函數(shù)的使用,感興趣的可以了解一下2022-06-06