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.