1

私は Qt を使用している学生プログラマーであり、アプリケーションのインストールのマップを収集しようとして、QProcess を使用して bash コマンド「which」を起動するという問題に遭遇したようです。私は次のコードを持っていますが、何が欠けているのか本当に迷っています。QProcess のドキュメントを参照しましたが、何が問題なのかまだわかりません。

このコードが実行されるたびに、指定されたディレクトリにファイルが作成されません。ファイルが構築されていないと、アプリケーションを続行できません。

//datatypes
QProcess *findFiles = new QProcess();
QStringList arguments;
QStringList InstallationList;
QString program = "/bin/bash";
QString currentUsersHomeDirectory = QDir::homePath();
QString tmpScriptLocation = currentUsersHomeDirectory;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
//generate file with list of files found
tmpScriptLocation += ".whichBAScriptOutput";
arguments << QString(QString("which -a certainFile >> ") += tmpScriptLocation);
findFiles->setProcessEnvironment(env);
findFiles->start(program,arguments);
findFiles->waitForFinished();
4

2 に答える 2

2

これ/usr/bin/にあるので、パスを変更してみてください..

編集: QProcessのシグナルreadyReadStandardOutput()をスロットに接続する必要があります。実際にドキュメントを見ると、 QProcess はQIODeviceから継承されます。これは、次のようなことができることを意味します。

while(canReadLine()){
   string line = readLine();
   ...
}

すでに Qt でクライアント サーバー アプリケーションを作成している場合は、疑似コードを再構成したと確信しています。

于 2012-11-14T13:38:32.807 に答える
0

whichおっしゃるとおり実行したいのですがbash、手書きのスクリプトで起動しています。これを順番に行うためのはるかに簡単な方法があります。

//preparing the job, 
QProcess process;
QString processName = "which"; //or absoute path if not in path
QStringList arguments = QStringList() << "-a" 
                                      << "certainFile.txt";

// process.setWorkingDirectory() //if you want it to execute in a specific directory

//start the process                                  
process.start(processName, arguments ); 
//sit back and wait                                     
process.waitForStarted(); //blocking, return bool
process.waitForFinished(); //blocking, return bool                                      
if(process.exitCode() != 0){
  //Something went wrong
}

//return a byte array containing what the command "which" print in console
QByteArray processOutput = process.readAll(); 
于 2012-11-14T13:57:19.577 に答える