2016-09-05 4 views
0

터미널을 통해 텍스트 파일을 가져 와서 다른 텍스트 파일을 생성하는 C++ 프로그램이 있습니다. 나는 먼저 텍스트 문자열을 생성하고, 파일에 저장하고, 생성 된 파일을 입력으로 사용하여 하위 프로세스로 C++ 프로그램을 실행하고 출력 텍스트 파일을 다시 파이썬 객체로 구문 분석하는 Python 스크립트에서이 프로그램을 실행합니다.서브 프로세스를 사용하지 않고 파이썬 객체를 C++ 프로그램에 직접 전달하십시오.

서브 프로세스 호출을 사용하지 않고이 작업을 수행 할 수 있습니까? 즉 : 읽기 및 쓰기를 피하고 텍스트 문자열을 입력으로 사용하여 Python 환경에서 C++ 프로그램을 실행 한 다음 출력을 다시 파이썬 환경에서 캡처 할 수 있습니까?

코드의 경우 community_detection_multiplex의 코드는 this IPython notebook입니다.

+0

파이썬으로 작성된 C++ 파서/인터프리터가 있습니까? 그렇다면 위대합니다. 그렇지 않으면 아니오. –

+0

하위 프로세스를 생성하는 것이 실제로 큰 문제가 아닙니까? 파일의 보안 위험을 피하려면 stdin/stdout 파이프 경로 재 지정을 통해 입력/출력을 보낼 수 있습니다. –

+0

@RichardHodges 파일로 저장되지 않은 경우 어떻게 문자열을 C++ 프로그램에 전달합니까? –

답변

2

ctypes을 사용할 수 있습니다.
C++ 함수가 extern "c"으로 래핑되고 C 코드로 컴파일되어야합니다.

은 C++ 기능처럼 보이는 말 :

char* changeString(char* someString) 
{ 
    // do something with your string 
    return someString; 
} 

당신은 그런 식으로 파이썬에서 호출 할 수 있습니다

import ctypes as ct 

yourString = "somestring" 
yourDLL = ct.CDLL("path/to/dll") # assign the dll to a variable 
cppFunc = yourDLL.changeString # assign the cpp func to a variable 
cppFunc.restype = ct.c_char_p # set the return type to a string 
returnedString = cppfunc(yourString.encode('ascii')).decode() 

지금 returnedString이 처리 된 문자열이있을 것이다.

+0

이상적으로 나는 파일을 저장하지 않기를 바랄 것입니다. –

+0

내 솔루션 C++ 함수를 호출하고 문자열을 전달합니다. 파이썬에서 파일을 열고 (열어 놓은 상태에서) C++로 전달하려면이 방법이 적합하지 않습니다. – galah92

+0

나는이 해결책이 파일로 저장된 문자열을 가지고 있음을 이해한다. –

관련 문제