我想用QProcess执行命令行:
QString elf_path=C:\\files\\file.elf;
QString appli = "readelf.exe -a "+elf_path+" >>C:\\work\\essai.txt";
QProcess *process = new QProcess();
process->execute(appli);
但QT显示此错误:
readelf: Error: '>>C:\work\essai.txt': No such file
你能帮助我吗?
答案 0 :(得分:1)
QProcess :: execute命令将第一个参数作为可执行文件,并将每个下一个参数作为参数传递给该可执行文件。所以错误是因为readelf可执行文件正在接收“>> C:\ work \ essai.txt”作为参数。
解决此问题的方法不止一个。
您可以从redlf命令(readAllStandardOutput)读取输出,从Qt打开文件essai.txt并自行附加输出,而不是将输出重定向到文本文件。你应该在检索输出之前调用waitForFinished()。
或者,QProcess中有一个名为setStandardOutputFile的函数,它使用文件名将进程的输出重定向到该文件,这可能更容易: -
QProcess* proc = new QProcess;
QString appli = "readelf.exe -a " + elf_path;
proc->setStandardOutputFile("C:\\work\\essai.txt", QIODevice::Append);
proc->start(appli);
最后,您可以创建一个shell脚本并使用您的参数调用它,其中shell脚本将知道最终输入参数将用于输出重定向。
答案 1 :(得分:0)
QProcess :: execute是静态方法。您不应该在您的情况下创建QProcess的实例。尝试下一个代码
const QString path2exe = "readelf.exe";
QStringList commandline;
commandline << "-a";
commandline << elfPath;
commandline << "c:\\work\\essai.txt"
QProcess::execute( path2exe, commandline );
答案 2 :(得分:0)
看起来readelf
将您的重定向视为另一个文件,这是有效的,因为readelf
可以在命令行上处理多个文件。
因此,Qt
进程内容没有按预期处理重定向。
在某种类型的shell中,重定向用于设置标准输入/输出(可能还有其他)然后它们将从可执行程序看到的命令行中删除。换句话说,可执行文件通常看不到重定向,它只是输出到shell连接到某种文件的标准输出。
为了解决这个问题,您必须运行 了解重定向的cmd
进程(将readelf
命令作为参数传递)或使用某些内容像方法QProcess::readAllStandardOutput()
一样将输出转换为字节数组而不是写入临时文件。