2011-12-21 8 views
2

일부 원시 데이터에 대한 분석을 수행하는 데 사용되는 독립 실행 형 Python 모듈이 있습니다. 모듈은 훌륭하게 작동합니다.Python에서 C struct를 수신/가져 오는 방법

이제 출력에서 ​​추가 처리를 수행 할 C 소스의 Python 모듈에서 생성 된 출력이 필요합니다.

여기 흐름의 거친 아이디어 :

  1. C 소스가 파이썬 모듈을 호출합니다.
  2. 파이썬 모듈은 생성 된 결과를 C 구조체에 채우고 다음 C 소스로 전달합니다.

그래서 C 소스 코드에서 파이썬 모듈의 결과를 얻는 가장 좋은 방법은 무엇입니까?

결과를 채우기 위해 다음과 같이 사용해야합니까? 이 모듈은 DLL 및 공유 객체 파이썬 코드 다른 방법은 주위에서 에 액세스하기위한 것입니다 -

from ctypes import * 
class result(Structure):  
    _fields_ = [("status", c_int), ...] 
+0

정말 좋은 방법은 아니지만 가장 쉬운 방법은 임시 파일에 출력을 파이썬 모듈을 가지고 C로 파일을 읽는 것일 것입니다. – wim

+0

이것이 마지막 방법이라고 생각합니까? – MA1

답변

3

나는 당신이하는 ctypes 모듈을 사용하는 것이 좋습니다 생각하지 않습니다.

C 프로그램이 파이썬 모듈을 호출하는 방법을 지정하지 않았습니다. 그럴거야

  • popen 같은 것을 사용하여 파이썬 스크립트를 호출 할 것인가? 그렇다면 파이썬에서 stdout에 데이터를 쓰고 C로 데이터를 적절하게 해석 할 수 있습니다.이를 위해 자신 만의 작은 프로토콜을 설계해야합니다. 이것은 ad-hoc 프로토콜 일 수 있습니다. 또는 JSON과 같은 기존 형식을 사용할 수 있습니다.이 형식은 C 및 Python 용 라이브러리를 제공합니다.

  • embed the Python VM in your C program? 그런 다음 적절한 Py* 값에 C 값을 변환하고 파이썬 함수에 인수로 전달할 수있는 PyTuple에 넣어해야합니다, C.에서 파이썬 함수의 출력이있을 것 PyObject, 데이터를 가져 오기 위해 압축을 풀어야합니다 (C로).

두 경우 모두 포장 및 포장을 풀어야합니다.

+0

대단한 감사. 현재 popen을 사용하여 python 스크립트를 호출하고 있습니다. 빠른 솔루션이 필요하므로 표준 출력에서 ​​데이터를 읽고 쓸 것입니다. – MA1

관련 문제