2013-02-22 4 views
1

필요한 곳에서 임베디드 파이썬 인터프리터의 작업을 일시 중지/다시 시작할 수 있습니까? 예를 들면 :임베디드 파이썬 인터프리터 일시 중지/재개

C++ 의사 코드 부분 :

main() 
{ 
    script = "python_script.py"; 
    ... 

    RunScript(script); //-- python script runs till the command 'stop' 
    while(true) 
    { 
      //... read values from some variables in python-script 
      //... do some work ... 
      //... write new value to some other variables in python-script 
      ResumeScript(script); //-- python script resumes it's work where 
           // it was stopped. Not from begin! 
    } 
    ... 
} 

파이썬 스크립트 의사 코드 부분 :

#... do some init-work 
while true: 
     #... do some work 
     stop # - here script stops and C++-function RunScript() 
      # returns control to C++-part 
     #... After calling C++-function ResumeScript 
     # the work continues from this line 

이 파이썬/C API를 할 수 있습니까?

감사

답변

0

는 나도 최근에 방법을 수동으로 "드라이브"임베디드 언어 검색 한 나는이 질문을 가로 질러 와서 내가 잠재적 인 해결 방법을 공유 할 거라고 생각.

소켓이나 메시징 시스템을 통해 "차단"동작을 구현할 것입니다. 실제로 파이썬 인터프리터 전체를 멈추게하는 대신, C++이 평가를하기를 기다리고있을 때 차단하도록하십시오.

C++는 임베디드 런타임을 시작한 다음 파이썬이 준비가되었음을 "신호를 던지기"를 기다리는 일종의 루프를 입력합니다. 예를 들어 C++은 5000 번 포트를 청취하고, 파이썬을 시작하고, 파이썬이 작동하고, localhost의 포트 5000에 연결 한 다음, C++이 연결을보고 파이썬에서 데이터를 가져 와서 작업을 수행 한 다음 소켓을 통해 파이썬에 다시 데이터를 셔플합니다. 그러면 python은 데이터를 받고 블로킹 루프를 떠납니다.

가상 런타임을 완전히 일시 중지하는 방법이 필요하지만, 소켓과 동일한 두 가지 코드를 조정하는 데 소켓을 사용하는 차단 동작을 사용할 수 있습니다.

행운을 빕니다 :)

편집 : 당신은 완전히 파이썬을 중지하려면이 대답에 사용이 "주입"기능을 후크 할 수 있습니다. 대기 루프를 삽입하도록 수정하십시오.

Stopping embedded Python

관련 문제