2014-04-25 3 views
1

저는 quadrotor 및 mavlink가있는 프로젝트에서 작업하고 있습니다. 내 우분투 PC에 mavproxy를 성공적으로 설치하고 터미널에서 문제없이 실행했습니다. 터미널에서 mavproxy.py을 실행하고 mavlink (APM 자동 조종 장치)를 지원하는 quadrotor를 연결하면 mavproxy가 quadrotor를 감지하고 모든 것이 정상입니다.popen에서 명령 셸 실행 및 다른 명령 셸 설정

mavproxy.py을 실행하면 터미널의 프로그램이 여러 매개 변수를 보내고받습니다. 터미널에 어떤 구성을 위해 액세스 할 수있는 매개 변수를 쓸 수 있습니다. 예를 들어, 터미널에서 명령 help :

$ mavlink.py 
. 
.data beging 
. 
STABILIZE> "when the program finish the configuration, allowed to you for doing an input any parameter, for example help" 

STABILIZE>help 
show all helps. 

은 내가 터미널이 나는 경우에 나타날 것 같은 일을 보여줍니다이 C++ 프로그램을 실행하면 C++

include <iostream> 
include <stdio.h> 

using namespace std; 

int main() { 
FILE *in; 
char buff[512]; 

if(!(in = popen("mavlink.py", "r"))){ 
    return 1; 
} 

while(fgets(buff, sizeof(buff), in)!=NULL){ 
    cout << buff; 
} 
pclose(in); 

return 0; 
} 

에서 mavlink.py을 실행하는 코드가 터미널에서 mavproxy.py을 실행하고 있었지만 C++ 코드에서 help과 같은 명령을 어떻게 보낼 수 있는지 알지 못합니다.

프로그램을 읽을 경우, while 문은 프로그램 mavproxy.py과 터미널 cout에서 발생하는 매개 변수를 캡처 할 날 수 있습니다,하지만 당신은 터미널 출구에서 뭔가를 작성하거나 CTRL + C를 누를 때까지 mavlink.py은 결코 끝나지이므로 while 루프가 끝나지 않습니다.

나는 Popen 함수에 대해 읽었지 만, 올바른 형식을 찾지 못했습니다.

내 프로그램에 mavlink.h 라이브러리를 사용할 수 있고 매개 변수를 전송할 수 있지만, mavlink.h과 같이하고 싶지는 않습니다.

+0

당신이 원하는 경우 읽기 및 쓰기 모두에 대해 popen2에 대한 검색이 있습니다. 표준 라이브러리의 일부는 아니지만 구현이 있습니다. –

+0

나는 pepen2로 C++로 무엇인가하려고 노력했다. 파이썬에서도 사용되는 것을 볼 수 있습니다. 파이톤에서 예제가 있습니까? 교장 py 프로그램에서 다른 Phyton 스크립트를 호출하는 예제가 있습니까? 감사합니다 – user3574324

+0

@ user3574324 이것을 해결할 수 있었습니까? 나는 똑같은 문제에 직면하고있다. 최대한 빨리 돌아 가라! 감사합니다. –

답변

0

귀하의 질문을 이해할 수 있는지 잘 모르겠습니다 만, 귀하는 mavlink.py에 명령을 보내고 그 결과를 읽고 싶다고 생각합니다. 이런 경우

, 당신은에서 popen()의 오픈 모드를 변경해야합니다 "r"당신이 쓸 수 있도록 "w는"당신은 이런 식으로 명령을 보낼 수 :

FILE *fp; 
char *command="HELP"; 

if(!(fp = popen("mavlink.py", "w"))){ 
    return 1; 

fwrite(command, sizeof(char), strlen(command), fp); 
+0

답변 해 주셔서 감사합니다. 이 함수는 popen에 대해 읽었습니다.이 함수는 파일을 읽고 쓰는 데 사용되므로, 작성한 코드를 사용하면 mavlink의 소스 코드에 쓸 것이라고 생각합니다. py. 내 목적은, C + +에서 mavlink.py 코드를 실행하고 그것이 실행 중일 때, 나는 "도움말"과 같은 명령을 보낼 수 있기를 원합니다. 그것은 당신의 코드와 posible입니까? 이 코드를 사용하면 mavlink.py가 실행 중일 때 명령 도움말을 보낼 수 있습니다. 또 다른 옵션이 있습니다, 그것은 파이썬으로 변경 C + +지만, 파이썬에 경험이 없어 – user3574324