2017-01-19 21 views
7

Android 플랫폼에서 QProcess를 통해 명령을 실행할 수 없습니다. 나는 Qt 라이브러리를 사용하고있다. 아무도 안드로이드 플랫폼에서 내 응용 프로그램에서 셸 명령을 실행하는 방법을 설명 할 수 있습니까?Android 플랫폼에서 QProcess를 통해 쉘 명령을 실행하십시오.

QProcess process(); 

    process.execute("ls"); 

    bool finished = process.waitForFinished(-1); 

    qDebug() << "End : " << finished << " Output : " << process.errorString(); 

타임 아웃을 지정하지 않으면 프로세스가 완료되지 않습니다. timeout을 지정하면 process.waitForFinished()가 false를 반환합니다. 10000 ms라고 가정합니다.

+0

누구든지 도와 드릴까요? – ArnesTwin

+0

무엇이 잘못되었는지 설명해 주시겠습니까? 프로세스가 끝난 후에'QProcess :: error()','errorString()','exitCode()','exitStatus()'등의 값은 무엇입니까. –

+0

끝내지 않고 그냥 기다립니다 – ArnesTwin

답변

5

귀하의 예제 코드에 결함이은과 그것은 어떤 플랫폼에서도 작동하지 않을 것입니다! ls 명령이 정확하지 않습니다! 이 명령은 셸 프로그램 (예 : bash)으로 빌드됩니다.

코드의 또 다른 버그는 QProcess::executestatic function입니다. 최종 행은 시작하려고 시도한 프로세스에 영향을 미치지 않습니다.

그래서 코드는 다음과 같아야합니다

QProcess process; 
process.start("bash", QStringList() << "-c" << "ls"); 

bool finished = process.waitForFinished(-1); 
+0

process.start ("bash", QStringList() << "-c"<< "ls")를 사용하여 코드를 보았습니다. 그러나 그것은 끝나지 않습니다. 그것은 우분투에서 문제없이 실행되지만 안드로이드에서 실행되지 않습니다 – ArnesTwin

+0

질문은 : 안드로이드는'bash'를 가지고 있습니까? 이것을'adb'로 확인하십시오. 그리고 그것이 있다면 : 필요한 경우 실행시킬 수있는 능력이 있습니까? 이제 로그를보고 어떤 종류의 오류 정보가 인쇄되는지 확인해야합니다. –

+0

'ls'는 내장 함수가 아닙니다. bash 문서를 참조하십시오 : https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html –

0

정적 함수 인 QProcess::execute()을 사용하고 있습니다. Qt documentation을 인용 : "새 프로세스에서 프로그램 명령을 시작하고 완료 될 때까지 기다립니다".

그래서 코드에서 일어날 수있는 것은 무엇 :

QProcess process(); 

process.execute("ls"); // Start "ls" and wait for it to finish 
// "ls" has finished 
bool finished = process.waitForFinished(-1); // Wait for the process to finish, but there is no process and you could get locked here forever... 

은 당신의 코드를 수정하는 2 가지 방법이 있습니다 :

QProcess process(); 

process.start("ls"); // Start "ls" and returns 

bool finished = process.waitForFinished(-1); 

qDebug() << "End : " << finished << " Output : " << process.errorString(); 

또는

QProcess::execute("ls"); 
+0

불행히도 결과는 같습니다. 그것은 끝나지 않고 단지 기다린다 – ArnesTwin

+0

나는 약간의 테스트를했다. Qt는 존재하지 않는 프로세스를 기다리는 것을 잠그지 않는 것처럼 보입니다. 예를 들어 데스크탑과 Android에서 잘 작동합니다. 문제는 "ls"가 멈추지 않는다는 것일 수 있습니다. 데비안에서 프로세스가 파일 시스템에 액세스하고 다른 프로세스가 프로세스에 액세스하지 못하게하는 경우를 보았습니다. 다른 프로세스는 멈추었을 것입니다. –