2016-10-03 2 views
0

J'écris un script de démarrage qui démarre et se connecte sur toutes mes applications que j'utilise quotidiennement. Pour cela j'utilise le module PyAutoGui, python 3, et une autre application qui gère la disposition de mes fenêtres sur mes 2 moniteurs.Le module PyAutoGui donne PermissionError à la 2ème exécution

def smv(username, hotkey): 
    # starting application 
    os.system("smv.exe") 
    # it autofocuses on the username field 
    pyautogui.typewrite(username) 
    # (passwords are the same) 
    pyautogui.typewrite("PASSWORD\n") 
    # move to the window header (where title, minimize, close, etc..) 
    pyautogui.moveTo(100, 10, duration=0) 
    # drag the window to the far right of the primary monitor (since pyautogui doesn't support multiple monitors) 
    pyautogui.dragTo(1910, 20, duration=1, button="left") 
    # press the hotkey that belongs to the window layout manager 
    pyautogui.hotkey("ctrl", "alt", hotkey) 

smv("username", "num7") 
smv("username2", "num1") 

La chose étrange est que le premier smv() fonctionne parfaitement bien. L'application démarre, se connecte, déplace la fenêtre et ajuste la position/taille avec la touche de raccourci. Le problème se produit lorsque le second smv() s'exécute. Application démarre, se connecte, se déplace à en-tête de la fenêtre, mais se brise puis avec:

Traceback (most recent call last): 
File "main.py", line 15, in <module> 
    smv("username2", "num1") 
File "D:\files\PyCharm\startup\smv2.py", line 10, in start 
    pyautogui.dragTo(1919, 10, duration=1, button="left") 
File "d:\PortableApps\Miniconda3\lib\site-packages\PyAutoGUI-0.9.33-py3.5.egg\pyautogui\__init__.py", line 683, in dragTo 
File "d:\PortableApps\Miniconda3\lib\site-packages\PyAutoGUI-0.9.33-py3.5.egg\pyautogui\__init__.py", line 274, in mouseDown 
File "d:\PortableApps\Miniconda3\lib\site-packages\PyAutoGUI-0.9.33-py3.5.egg\pyautogui\_pyautogui_win.py", line 393, in _mouseDown 
File "d:\PortableApps\Miniconda3\lib\site-packages\PyAutoGUI-0.9.33-py3.5.egg\pyautogui\_pyautogui_win.py", line 480, in _sendMouseEvent 
PermissionError: [WinError 5] Access denied. 

Je suis fissuration mon cerveau en essayant de comprendre pourquoi il se bloque à la deuxième manche. J'ai essayé d'utiliser try et excepté les blocs (non utilisés), j'ai changé l'ordre dans lequel l'application commence (num1 avant num7 et vice versa), mais pas d'utilisation (le premier s'exécute, le deuxième plante).

J'ai même essayé de les séparer en deux fichiers et de les lancer à partir d'un troisième fichier "main.py". Ce n'est pas efficace, je sais, mais je voulais voir si cela faisait une différence ... vous l'avez deviné: ce n'est pas le cas. Il se bloque toujours sur PermissionError.

Répondre

0

En 0.9.34, cela a été corrigé (ou du moins, les exceptions sont maintenant supprimées puisque les clics semblent toujours fonctionner quand même). Donc la solution est de mettre à jour PyAutoGUI.