NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    기타 3부 - 파이썬 매크로를 엔지엠에서 실행하기. (Running Python macros in NGM.)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 파이썬으로 만든 매크로를 엔지엠에서 동작시키는 강좌가 벌써 마지막이네요. 이 내용을 학습하려면 앞의 1부와 2부를 학습하고, 결과가 있어야 합니다. 이전 내용에서 이어서 진행하기 때문입니다^^; 우선, C#에는 IronPython이라는 Nuget Package가 있습니다. 쉽게 사용할 수 있다는 장점이 있어서 좋긴한데요. 어떤 이유인지는 모르겠지만~ 2.XX 버전에서 더이상 업데이트가 없습니다. 그래서, 파이썬이 3.XX까지 나온 현재로는 사용하기가 부담스럽습니다. 대안으로 몇가지가 더 있긴하지만, 설치 환경 구성 및 사용법이 어려워서 그런지 예제가 많이 없습니다. 참고할만한 내용이 없다는건 원하는 기능을 구현하는게 불가능하거나 시간이 오래 걸린다는 뜻입니다. 그래서 Pass했습니다.

    22l1e1K.png

     

     

    첨부되어 있는 test.py를 다운로드 받은 후 적당한 위치에 복사합니다. 그리고, VSC(Visual Studio Code)에서 열어주세요. 1부와 2부를 통해 여러분들은 파이썬 개발 환경이 이미 갖추어져 있으므로 환경 구성에 대한 내용은 다루지 않도록 하겠습니다.

    mx0D0oT.png

     

     

    IronPython 패키지를 이용하면 굳이 exe 실행 파일로 만들지 않아도 됩니다. 하지만, 버전의 문제로 pyautogui를 사용할 수 없었습니다. 환경 변수 및 여러가지 패키지 버전을 바꿔봐도 지원하지 않는다는 에러만 발생하더라구요. 좀 더 검색해보니 IronPython이 Python 3.XX를 지원하지 않아서 그런듯 보입니다. 관련 커뮤니티도 더이상 업데이트가 없는거보니 운영적인 문제가 있는게 아닌가... 생각되기도 하구요. 그래서, exe 파일로 만들어서 처리하는 방향으로 가야 할듯합니다. 아래 명령을 통해 인스톨러를 설치해주세요.

    pip install pyinstaller

     

    설치가 완료되면 아래 명령으로 exe를 만드세요. 옵션으로 --onefile을 추가하세요. 이 옵션을 추가하면 단독으로 실행 가능한 파일로 만들어집니다.

    pyinstaller --onefile <다운로드 받은 파일 경로>\test.py

     

    아래 위치에 exe 파일이 생성되었습니다.

    C:\Users\<사용자>\dist\test.exe

     

    해당 위치에서 test.exe를 실행 해보세요. 속도가 좀 느리긴하지만... 정상 동작하는걸 알 수 있습니다^^;

    wwm2P1Y.gif

     

     

    이제, 엔지엠 커스텀 모듈을 만들어봐야겠죠? Visual Studio 2019를 실행하고, 새로운 프로젝트를 하나 추가합니다. 프로젝트명은 "CustomToolPythonModule"로 명명 했습니다. 엔지엠에 설치할 수 있는 커스텀 모듈은 ToolFunc 2종류입니다. Tool은 반환값이 없는 액션이며, Func는 반환값이 있는 액션입니다. 자세한 내용은 메뉴얼의 커스텀 모듈 만들기를 참고해주세요^^;

    [ 커스텀 모듈 학습하기 ]

     

    아래와 같이 참조를 추가하세요.

    tyRyrzD.png

     

     

    프로젝트에 "MouseMacroModel.cs" 클래스를 추가하고, 아래 코드를 붙여넣기 하세요. 그리고, 릴리즈 빌드를 수행합니다.

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace CustomToolPythonModule
    {
        public class MouseMacroModel : NGM.Models.Interface.BaseCustomToolModel
        {
            public override string DisplayCategory
            {
                get { return "파이썬"; }
            }
    
            public override string DisplayName
            {
                get { return "파이썬 매크로 실행"; }
            }
    
            public override void Execute()
            {
                //var engine = IronPython.Hosting.Python.CreateEngine();
                //var scope = engine.CreateScope();
                //var paths = engine.GetSearchPaths();
    
                //paths.Add(@"C:\Python27\Lib");
                //paths.Add(@"C:\Python27\Lib\site-packages");
    
                //engine.SetSearchPaths(paths);
    
                //try
                //{
                //    var source = engine.cr(@"C:\Users\ngmas\Desktop\test.py");
                //    source.Execute(scope);
                //}
                //catch (Exception ex)
                //{
                //    MessageBox.Show(ex.Message);
                //}
    
                var psi = new ProcessStartInfo();
                psi.FileName = @"C:\Users\ngmas\dist\test.exe";
    
                psi.UseShellExecute = false;
                psi.CreateNoWindow = true;
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardError = true;
    
                var erros = "";
                var results = "";
    
                using (var process = Process.Start(psi))
                {
                    erros = process.StandardError.ReadToEnd();
                    results = process.StandardOutput.ReadToEnd();
                }
    
                Console.WriteLine(erros);
                Console.WriteLine(results);
            }
        }
    }

     

    엔지엠 에디터를 실행한 후 메뉴의 관리자 > 도구 모듈 설치를 클릭하세요. 커스텀 모듈을 선택하면 "사용자 도구"에 파이썬이 추가된것을 확인할 수 있습니다.

    eHrgzXh.png

     

     

    새로운 스크립트를 하나 추가하고, "파이썬 매크로 실행" 액션을 추가하세요.

    fTbXtWg.png

     

     

    실행하면 바탕화면의 아이콘을 순차적으로 클릭하는것을 알 수 있습니다. 좀 느리긴 하지만요^^;

    gOMYeL3.gif

     

     

    이렇게해서 간단하게 파이썬으로 만든 매크로를 엔지엠에서 활용하는 방법에 대해 알아보았습니다. 사실, 코딩 방식으로 처리하려면 여러가지 부가적인 기능들(마우스 위치, 이미지 캡쳐, 필터, OCR, 서브 타스크등등...)을 구현하느라 많은 시간을 소비하게 됩니다. GUI까지 고려해야 한다면 더 많은 시간이 들어가겠죠? 이런 눈에 보이지 않는 작업들을 비기능 요건이라고 부릅니다. 사용자는 눈에 보이는 기능에만 집중하기에 간단해 보일겁니다. 하지만, 이런 세세한것까지 처리해야 하므로 상당히 많은 노력이 들어갑니다. 아무도 알아주지 않지만~ 개발자들은 그런일들에 많은 시간과 노력을 할애합니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    첨부파일

    댓글목록

    profile_image

    토뮤리얼님의 댓글

    no_profile 토뮤리얼 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    나중에라도 써먹을 수 있을것같네요 ㅋㅋㅋ

    profile_image

    엔지엠소프트웨어님의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    파이썬이 막강하긴 하죠..ㅎㅎ