如何使用QProcess中的bash命令'which'

时间:2012-11-14 01:05:21

标签: c++ bash qt qprocess which

我是一名使用Qt的学生程序员,我似乎遇到了一个问题,使用QProcess启动bash命令''试图收集应用程序的安装映射。我有以下代码,我真的迷失了我可能缺少的东西。我引用了QProcess documentation但仍然无法弄清楚什么是错误的。

每次运行此代码时,都不会在指定的目录中创建文件。如果没有构造文件,应用程序将无法继续。

//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();

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

位于 / usr / bin / 上,因此请尝试更改路径..

修改: 您需要将 QProcess 的信号 readyReadStandardOutput()连接到您的插槽。实际上,如果您查看文档 QProcess 继承自 QIODevice 。这意味着您可以执行以下操作:

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

如果您已经在Qt中编写了客户端 - 服务器应用程序,我相信您会重新配置伪代码。

答案 1 :(得分: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();