如何在Python中关闭Opera浏览器后仅执行一次视频播放命令?
问题描述
我希望关闭Opera浏览器时自动播放一段视频,当前写的Python代码虽然能实现播放,但Opera关闭后会重复执行播放操作;我需要实现仅在Opera关闭时执行一次视频播放,不会重复执行。当前代码如下:
# Import module import wmi from playsound import playsound import os import time from os import startfile while True: # Initializing the wmi constructor f = wmi.WMI() flag = 0 # Iterating through all the running processes for process in f.Win32_Process(): if "opera.exe" == process.Name: print("Application is Running") playsound('C:/Users/USER/Desktop/pyworkspace/waltuh3.mp3') flag = 1 break if flag == 0: print("Application is not Running") class Video(object): def __init__(self,path): self.path = path def play(self): startfile(self.path) class Movie_MP4(Video): type = "MP4" movie = Movie_MP4(r"C:\Users\USER\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\POLAR_BEAR.mp4") movie.play() time.sleep(3)
解决方案
原代码的问题在于每次检测到Opera没运行就播放视频,没判断是不是刚从运行状态关掉。只要加个变量跟踪Opera的状态变化,只在“从运行变关闭”的瞬间触发播放就行。
修改后的代码:
import wmi import time from os import startfile # 初始化状态:默认Opera没在运行 opera_was_running = False def play_video(video_path): # 直接播放视频,原有的类定义完全没必要,简化一下 startfile(video_path) def check_opera_running(): # 把检测Opera的逻辑单独拎出来,代码更清晰 wmi_instance = wmi.WMI() for process in wmi_instance.Win32_Process(): if process.Name == "opera.exe": return True return False while True: current_opera_state = check_opera_running() # 只有当Opera之前在运行,现在刚关掉时,才播放视频 if opera_was_running and not current_opera_state: print("Opera已关闭,开始播放视频") play_video(r"C:\Users\USER\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\POLAR_BEAR.mp4") # 更新状态,下次循环用 opera_was_running = current_opera_state # 如果你需要Opera运行时播放那个音频,就保留下面这段,不需要就删掉 # if current_opera_state: # playsound('C:/Users/USER/Desktop/pyworkspace/waltuh3.mp3') time.sleep(3)
改动说明
- 加了
opera_was_running变量,专门记录上一次循环时Opera的状态,用来判断是不是刚关闭 - 把检测和播放的逻辑封装成函数,代码更整洁,也方便后续修改
- 去掉了没必要的类定义,直接调用
startfile就能播放视频,简化代码 - 只在状态从“运行”变“关闭”时触发播放,确保只执行一次
内容的提问来源于stack exchange,提问作者Docem
相关产品推荐
相关产品推荐

