You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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("截图成功保存!")

额外提示

  1. 记得把输入的坐标转换为整数,ImageGrab.grab()的bbox参数要求是整数元组,直接用input()得到的字符串会引发类型错误。
  2. 如果还是遇到问题,可以尝试指定pyscreenshot的截图后端(比如backend="mss"),某些后端的子进程行为更稳定:
screenshot = ImageGrab.grab(bbox=bbox, backend="mss")

内容的提问来源于stack exchange,提问作者qspitzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:26:11