Codong's Development Diary RSS 태그 관리 글쓰기 방명록
2021-07-09 12:16:55

개요


일을 하다가 어떤 응용 프로그램을 이용해서 검색하고 파일을 다운 받는 작업을 진행해야 했다. 정말 단순한 작업인데 해야할 양이 많다 보니 자연스럽게 어떻게 자동화 시킬 수 있을까를 고민하게 되었다. 제일 먼저 떠오른 것이 '매크로'다!

파이썬 매크로를 키워드로 검색해보니 pyautogui가 제일 먼저 떴다. 유튜브로 쉽게 따라할 수 있는 것도 많길래 이것으로 선택했다! 실제로 사용하는데도 굉장히 간단했다!

... 아래의 문제와 만나기전까지는.😨



문제점


그래서 Pyautogui를 이용해서 잘 사용하고 있다가, 이상하게 한 10분? 정도가 지나면 응용프로그램이 응답하지 않는다면서 프로그램이 멈추는 것이다.

이미지 출처 : https://twitter.com/oz0727/status/1056224673376030720

딱 위의 사진처럼 되는 경우 다 알지 않는가 ㅎㅎ,, 이것까지는 문제되지 않는다. 다시 껐다 키면 되기 때문이다.
어..? 근데..??? 마우스가 왜 안움직이지....???

출처 : (좌) https://www.inven.co.kr/board/it/2633/29366 / (우) https://keepmeme.com/meme/loading-black-cat-meme

마우스가 로딩아이콘으로 바뀌면서 이 상태일 때 파이썬 script로 마우스 제어가 되지 않는 것이다..!
(마우스 로딩이 도는 것 처럼 내 머리도 로딩이 돌았다..😦)

자.... 이것을 어떻게 해결하면 좋을까....



해결법


처음엔 사실 어떻게 해야할지 아무것도 떠오르지 않았다... 구글링 또한 어떻게 검색해야할지 감이 안 왔다...

  • pyautogui 응용프로그램 응답없음
  • pyautogui 응답없음
  • pyautogui 마우스 안움직임
  • 등등...

pydirectinput을 써서 해보라니, 아니면 또 다른 제어 모듈을 사용해보기도 했다. 하지만 다 먹히지 않았다....
결국 검색을 해봐도 시원한 답을 얻을 수 없었다.. (내가 검색을 잘 못하는 것도 맞다...)

그래서 바람 한 번 쐬러 나가면서 "어떻게 하면 프로그램 응답없음 상태에서 벗어날 수 있을까?"에 집중을 해봤다.

그 결과 떠오르는 것이.. 프로그램을 새로 키는 것이다..!

이것과 관련된 구글링을 해보니 pywinauto 라는 것을 알게 되었고, 이 모듈을 통해 프로그램을 경로만 지정해주면 실행시킬 수 있다고 했다.!

바로 코드로 살펴보자.

from pywinauto.application import Application

path=r"C:\Program Files (x86)\your_program_dir\program.exe"
Application().start(path)

이런 식으로 바로 실행을 시킬 수 있는 것이다.!

여기서 잊으면 안되는 것이 우리는 마우스가 안 움직이는 상태에서 벗어나는 것이 목적이었다. 내가 예상한대로, 새로 프로그램을 실행시킴으로 프로세스가 전환이 되어서 그런지(사실 정확한 이유는 잘 모르겠다 ㅎㅎ,,) 다시 움직였다!!

결과적으로 이후 로직은 다음과 같다.

  1. 프로그램 응답없음 상태를 판단하는 코드를 작성
  2. 응답없음 상태라 판단시 해당 프로그램을 다시 키기.
  3. 이전 것은 종료하고 새것으로 처음부터 시작.

프로그램의 제어를 하는 것은 pywinauto로 가능하니 관련 예제는 이 곳을 참고 바란다~



마무리


이 문제가 해결되어 정말 다행이었다. 처음에는 정말 막막했는데 머리 좀 식히면서 생각해보니 잘 해결될 문제였다. 사실 더 쉽고 간편한 방법이 있을 수 있다. 하지만 아직 초보인 내 머리로는 이런 무식한 접근이 한계였다... 그래도 해결되었으니 다행이다.

혹여나 더 좋은 방법이나 원리에 대해 아는 것이 있으면 알려주시면 감사하겠습니다..☺️

이상 보고 끝!