为什么我在循环中发出哔哔声

时间:2015-10-22 11:22:40

标签: python ipython jupyter pyautogui

我使用pyautogui点击我的GUI上定期弹出的按钮,如下面的脚本所示。但是,当按钮不在屏幕上时,脚本会在循环时发出两声恼人的嘟嘟声。

如果我将pyautogui.locateOnScreen(...)替换为None,如果图片无法在屏幕上显示,这似乎是返回值,则声音似乎消失了。

该脚本使用python 2.7在Jupyter Notebook(v4)中运行,我在Debian 8.1上使用Gnome运行。

import pyautogui
import time

starttime = time.time()  

while time.time()-starttime<10:
    img_path_inactive = "/home/user/folder/inactive_target.png"
    img_path_active = "/home/user/folder/active_target.png"
    img_list = [img_path_inactive, img_path_active]
    get_target = map(pyautogui.locateOnScreen, img_list)  # <--- This line beeps! See edit 2

    if any(get_target):
        pyautogui.click(filter(None, get_target)[0][0], filter(None, get_target)[0][1])

    # The if check above was previously (hence the title):
    # if pyautogui.locateOnScreen(img_path_active) or pyautogui.locateOnScreen(img_path_inactive):
    #     click_target = pyautogui.locateOnScreen(img_path_active) or pyautogui.locateOnScreen(img_path_inactive)
    #     pyautogui.click(click_target[0], click_target[1])

    time.sleep(2)

print("Finished loop.")

修改

我将脚本放在.py文件中并从命令行运行它以检查它是否是一个jupyter的东西。尽管如此,它仍然存在。

之后我针对三张图片跑了pyautogui.locateOnScreen,这造成了三次哔哔声......所以它肯定是一个pyautogui问题/&#39;功能&#39; ...

修改2

pyautogui.locateOnScreen是从here导入的,请参阅第238行。实际上它确实会引发异常:

    except ImageNotFoundException:
        if time.time() - start > minSearchTime:
            raise

2 个答案:

答案 0 :(得分:1)

我也在使用GNU / Linux并在pyautogui.locateOnScreen()函数运行时遇到哔哔声(无论它是否找到图像)。

我发现scrot是罪魁祸首。解决方案:

  1. $ sudo mv / usr / bin / scrot / usr / bin / scrot-noisy

  2. 使用以下内容创建/ usr / bin / scrot:

  3. #!/斌/庆典

    scrot-noisy --silent“$ @”

    1. $ sudo chmod a + x / usr / bin / scrot

答案 1 :(得分:0)

好的,我找到了哔哔声的解决方法。

在转到导入pyautogui.locateOnScreen的{​​{3}}后,我相信该函数会在轨道的某处引发自定义ImageNotFoundException。我没有完全调试它。

在Gnome上,所有异常都是由一声恼人的哔哔声宣布的。

为我做的解决方法是source of the module

我将以下行添加到~/.xsession

xset b off

杀死了哔哔声。