使用Pyscreenshot的ImageGrab.grab()时程序重启问题求助
解决Python截图程序执行时重启的问题
你的问题核心原因是全局作用域的代码被重复执行了。pyscreenshot库在部分环境(比如Windows的某些截图后端)下,执行截图操作时会启动子进程,这会导致你的脚本被重新加载一次——而你把用户输入坐标的代码放在了全局区域,所以每次子进程启动时,就会再次弹出输入提示,看起来像是程序“重启”了。
修复方案:把交互和核心逻辑放到if __name__ == "__main__"块中
Python中,当脚本作为主程序运行时,__name__变量的值是__main__;而当脚本被作为模块导入(比如子进程加载)时,__name__会是模块名。把需要用户交互、执行截图的逻辑都放到这个判断块里,就能避免子进程重复执行这些代码。
修改后的完整代码:
import pyscreenshot as ImageGrab if __name__ == "__main__": # 仅当脚本作为主程序运行时,才执行用户输入和截图逻辑 x1 = input("X1> ") y1 = input("Y1> ") x2 = input("X2> ") y2 = input("Y2> ") # 注意:截图需要整数坐标,这里转换一下避免报错 bbox = (int(x1), int(y1), int(x2), int(y2)) # 执行截图 screenshot = ImageGrab.grab(bbox=bbox) # 可以保存或者展示截图,这里示例保存为文件 screenshot.save("my_screenshot.png") print("截图成功保存!")
额外提示
- 记得把输入的坐标转换为整数,
ImageGrab.grab()的bbox参数要求是整数元组,直接用input()得到的字符串会引发类型错误。 - 如果还是遇到问题,可以尝试指定
pyscreenshot的截图后端(比如backend="mss"),某些后端的子进程行为更稳定:
screenshot = ImageGrab.grab(bbox=bbox, backend="mss")
内容的提问来源于stack exchange,提问作者qspitzer
相关产品推荐
相关产品推荐

