Как использовать команду bash ‘which’ из QProcess

Я студент-программист, использующий 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();

Заранее благодарю за любую помощь!

1

Решение

который находится на / USR / бен / так что попробуй сменить путь ..

РЕДАКТИРОВАТЬ:
Вам необходимо подключиться QProcessсигнал readyReadStandardOutput () в ваш слот. На самом деле, если вы посмотрите на документацию QProcess наследуется от QIODevice. Это означает, что вы можете сделать что-то вроде:

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

если вы уже написали клиент-серверное приложение на Qt, я уверен, что вы изменили псевдокод ..

2

Другие решения

Как вы говорите, вы хотите выполнить 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();
0

По вопросам рекламы [email protected]