Python 런처가 코드를 실행하자마자 종료되는 이유와 해결 방법

파이썬 코드를 Python Launcher로 실행했는데, 코드가 실행되자마자 창이 닫혀버리는 상황을 종종 겪을 수 있습니다. 이는 코드를 실행한 후 더 이상 할 작업이 없을 때 발생하는 일반적인 현상입니다. 파이썬이 할 일을 모두 마치면 창을 닫아버리기 때문이죠.

아래는 왜 이런 일이 발생하는지, 그리고 이를 어떻게 해결할 수 있는지에 대한 몇 가지 이유와 방법입니다.


1. 스크립트가 정상 실행 후 바로 종료되는 경우

가장 흔한 경우입니다. 파이썬 코드가 문제없이 실행된 후 할 일이 없으면 창이 자동으로 닫힙니다.

해결 방법: 코드가 종료되기 전에 잠시 멈추도록 input() 함수를 추가하여 사용자의 입력을 기다리게 만들 수 있습니다.


2. 스크립트에 오류가 있어 실행 중에 충돌하는 경우

만약 코드에 오류가 있어 실행 도중 충돌한다면, 오류 메시지를 볼 시간도 없이 창이 닫혀버릴 수 있습니다.

해결 방법: Python Launcher로 더블 클릭해서 실행하는 대신, 터미널(Windows에서는 명령 프롬프트나 PowerShell)을 사용하여 직접 실행하면 창이 닫히지 않습니다. 이를 통해 오류 메시지를 확인할 수 있습니다.

위 명령어를 터미널에 입력하여 스크립트를 실행하면, 실행 후 창이 닫히지 않으므로 오류 메시지를 확인할 수 있습니다.


3. IDE에서 코드 실행 시 발생하는 경우

만약 IDLE, VS Code, PyCharm 등의 통합 개발 환경(IDE)에서 코드를 실행하고 있다면, IDE 자체에서 결과를 출력하고 창을 닫지 않을 가능성이 높습니다. 하지만 일부 설정에 따라 창이 자동으로 닫힐 수도 있습니다.

해결 방법: 사용하는 IDE의 설정을 확인하세요. 대부분의 IDE에는 실행 후 콘솔 창을 유지할 수 있는 옵션이 있습니다. 예를 들어, VS Code에서는 code runner 확장 프로그램을 사용하는 경우, "code-runner.runInTerminal": true로 설정하여 결과를 터미널에 표시할 수 있습니다.


위의 방법들을 통해 파이썬 코드 실행 후 창이 바로 닫히는 문제를 해결할 수 있습니다. 초보자 분들도 이 방법들을 활용해 편리하게 코드를 실행하고 결과를 확인해보세요!

'Python' 카테고리의 다른 글

[Python]C# 코드에서 Python Script 실행하는 3가지 방법  (0) 2020.07.10

C# 코드에서 Python Script 실행하는 3가지 방법

  1. Process to execute (https://www.youtube.com/watch?v=g1VWGdHRkHs)
  2. IronPython(nuget package 추가, 아직 IronPython3 없어서 python3 미지원)
  3. pythonnet(DLL 파일 추가하여 진행, nuget package 없음)

 

  • Process to execute (https://www.youtube.com/watch?v=g1VWGdHRkHs)
    1. Install Python
    2. Create a process for Python.exe
    3. Provide Script and arguments
    4. Process configuration
    5. Execute process and get output
    6. Display output
    • 영상에 자세히 나옴.
  • IronPython(nuget package 추가)
    • nubet package 추가(검색 IronPython)
    • Python2 까지 사용가능

      var engine = IronPython.Hosting.Python.CreateEngine();
      var scope = engine.CreateScope();try
      {
      var source = engine.CreateScriptSourceFromFile(@"*py file path*");
      source.Execute(scope);

      var getPythonFuncResult = scope.GetVariables<Func<string>>("*python function*");
      Console.WriteLine("def 실행 테스트 : " + getPythonFuncResult());

      var sum = scope.GetVariables<func<int, int, int>>("sum");
      console.WriteLine(sum(1,2));
      }
      catch(Exception ex)
      {
      Console.WriteLine(ex.Message);
      }
  • pythonnet(DLL 파일 추가, https://nowonbun.tistory.com/690)
    • phthonnet을 사용하기 위해 https://github.com/pythonnet/pythonnet 에서 소스 다운(solution file  : pythonnet.sln)
    • 프로젝트의 프로퍼티에서 configuration및 General의 Conditional compilation symbols 수정 (python 버전에 맞춰 수정 예) python3.7 → PYTHON3;PYTHON37;UCS2), Platform target 수정
    • 빌드 후 나온 dll 파일을 pythonnet을 사용하려는 프로젝트의 Reference Manager에서 추가
    • Python.Runtime namespace 추가.

 

//환경 변수 path 설정

// Python 홈 설정.

PythonEngine.PythonHome = PYTHON_HOME;

// 모듈 패키지 path 설정.

// pip하면 설치되는 패키지 폴더 설정

Path.Combine(PYTHON_HOME, @"Lib\site-packages")

// Python 엔진 초기화

PythonEngine.Initialize();

// Global Interpreter Lock을 취득

using (Py.GIL())

{

// String 식으로 python 식 테스트

PythonEngine.RunSimpleString(@"

import sys;

print('hello world');

print(sys.version);

");

// 개인 패키지 폴더의 py file을 읽는다.

dynamic test = Py.Import("example.test");

// example/test.py의 Calculator 클래스를 선언

dynamic f = test.Calculator(1, 2);

// Calculator의 add함수를 호출

Console.WriteLine(f.add());

}

// python 환경을 종료한다.

PythonEngine.Shutdown();

+ Recent posts