본 프로젝트는 파이썬의 스크립트코드를 c++에서 런타임으로 실행하고, 콘솔출력하거나 문자열데이터로 불러오는 프로그램입니다.
최근 파이썬의 tensorflow (keras), matplot, pytorch, scikit등 여러가지 라이브러리로 머신러닝쪽 공부중입니다.
하지만 저의 메인언어는 c++이기때문에, c++에서 좀더 유연하게 파이썬에서 실행된 결과값을 불러오기위하여 개인적인 이유로 만들었습니다.
2021-10-05기준 Windows11 Home 사용했으며, 컴파일러는 MSVC를 사용했습니다.
c++버전은 20사용했습니다.
python버전은 3.8.8사용했습니다.
파이썬의 샘플코드(softmax regression, print)도 깃헙에 같이 올려놨는데, 기본적으로 tensorflow, matplotlib 라이브러리는 깔려 있어야 잘될것이다.
우선 버전은 만들지는 않았다.
물론 후속버전을 만들려고는 생각해봤다만..
아마, 후속버전을 만든다고하면, 이런식으로 응용프로그램으로 배포하는것이 아닌, 라이브러리로 배포하게될것이다.
우선 이 프로젝트는 응용프로그램으로 배포하고는 있지만,
오픈소스이기때문에, 사용자가 따로 만져도되고 무엇보다 객체화를 자연스럽게 해놨기때문에 그냥 몇몇기능들만 만져놔도 쉽게 수정할 수 있다.
예를들어서..
typedef struct __MAWILE_PIPE_INFO {
std::vector<std::string> outText; // 파이썬의 실행결과가 저장될 문자열벡터
HANDLE WriteOutHandle; // 파이썬의 실행결과에 대하여 전달될 핸들 (없으면 콘솔핸들로 전달됨.)
bool isUseInput, // 파이썬코드에 입력값이 있냐? 물어보는요소
isUseWriteOutHandle, // 파이썬의 실행결과에 대하여 전달될 핸들을 따로 사용할거냐? 물어보는요소 (false면 콘솔핸들로 전달됨.)
isReportResultString; // 파이썬의 실행결과를 outText에 저장할거냐? 물어보는 요소
char* inputBuf; // 파이썬코드의 문자열 입력값을 가리키는 포인터
void clear(); // 구조체 초기화함수
} PER_PIPEINFO, *LPPER_PIPEINFO;
위 구조체는 내가 일부러 사용자가 수정하기 쉽게 구조체로 만들어놨다.
위 주석은 귀찮아서 깃헙 코드에서는 안적어놨다. (즉 여기서만 알수있는 정보!!)
커밋해서 수정해야하는데 귀찮다..(귀차니즘 발동~~~!!@)
디자인도 좀 할려고했는데, 귀찮아서 크게 하지는 않았다...;;
자식프로세스 만들기 -> 입출력 파이프라인 연결 ->
읽어서 문자열벡터에 넣기 -> 끝.
프로그램자체가 심플하다보니까, 딱히 크게 말할점은 없는것같다..
졸리다....