본문 바로가기

c#/.net

C#에서 python 스크립트 실행하기

c# 코드에서 파이썬 크롤링 스크립트나 기타 파이썬 라이브러리 스크립트를 실행이 필요할 때 ProcessStart를 사용하여 실행하는 방법입니다.

1.파이썬 스크립트 생성

스크립트를 실행하면 스크립트실행이라는 문구가 출력되는 파이썬 스크립트를 아래와 같이 작성합니다. 

2.C# 코드에서 Porcess 클래스를 통한 실행로직 작성

c#에서 파이썬 스크립트를 실행하기 위한 코드를 작성 해줍니다.

private string _pythonPath = "D:\\Source\\Test\\myenv\\Scripts\\python.exe";
        public string ProcessStart(string scriptPath ,string arguments) 
        {
            using (Process process = new Process())
            {
 
                process.StartInfo.FileName = _pythonPath;  // 파이썬 실행 파일의 경로 (파이썬이 시스템 PATH에 추가되어 있어야 함)
                process.StartInfo.Arguments = $"{scriptPath} {arguments}";
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardError = true;
                process.StartInfo.CreateNoWindow = true;
 
                process.Start();
 
                // 파이썬 스크립트의 출력을 읽음
                string output = process.StandardOutput.ReadToEnd();
                string error = process.StandardError.ReadToEnd();
 
                process.WaitForExit();
 
                Console.WriteLine("Output:");
                Console.WriteLine(output);
 
                Console.WriteLine("Error:");
                Console.WriteLine(error);
 
                return output;
            }
        }

위와 같이 Process 클래스를 사용하여 프로세스를 실행하고 이때 startInfo 에 기본적인 설정 값들을 할당 해줍니다.

하나씩 살펴보면 아래와 같습니다.

StartInfo 속성 의미

StartInfo.FileName = 설정할 파이썬의 실행 경로 세팅
StartInfo.Argument = 파이썬 스크립트 경로 및 아규먼트 세팅
StartInfo.UseShellExecute = 프로세스 직접실행 or 쉘 실행 여부
StartInfo.RedirectStandardOutput = 스크립트에서 출력된 값 반환
StartInfo.RedirectStandardError = 스크립트에서 출력된 에러 값 반환
StartInfo.CreateNoWindow = 윈도우창 생성 여부

위처럼 스크립트에서 반환되는 값을 얻기 위해서는 StartInfo의 RedirectStandardOutput을 설정해야 합니다.

3. 코드 실행

코드를 실행해보면 

아래와 같이 StandardOutput.ReadToEnd()메서드를 통해서 반환값을 받아와 스크립트 실행 문구를 출력하는 것을 확인 할 수 있습니다.

마찬가지로 StandardError.ReadToEnd()메서드를 통해서는 스크립트에서 발생한 에러문구를 받아와 출력 가능합니다.