2017-01-19 4 views
7

AndroidプラットフォームではQProcess経由でコマンドを実行できません。私はQtライブラリを使用しています。誰でもAndroidプラットフォーム上のアプリケーションからシェルコマンドを実行する方法を説明できますか?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)。

コードのもう1つのバグは、QProcess::executestatic functionです。 最終行は、開始しようとしたプロセスに影響を与えません。

だからあなたのコードは次のようになります。

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

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

process.start( "bash"、QStringList()<< "-c" << "ls")でコードを試しました。しかしそれは終わらない。それは問題なくubuntuで実行されますが、アンドロイドで実行されません – 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"が止まらないということです。私は、プロセスがファイルシステムにアクセスし、他のプロセスがそれにアクセスするのを防ぐDebianのようなケースを見てきました。他のプロセスは止まっていました。 –

関連する問題