我想將包含星號的引數傳遞給 QProcess。下面列出的代碼可以重現我的問題:
#include <QDebug>
#include <QProcess>
int main(int argc, char * argv[])
{
QStringList arguments;
arguments << "-l" << "*.cpp";
QProcess ps;
ps.start("ls", arguments);
ps.waitForFinished();
qDebug() << ps.readAll();
}
我無法ls -l *.cpp像在 shell 中那樣運行。使通配符適用于 QProcess 的正確方法是什么?我正在使用 Debian 穩定版附帶的 Qt 5.15.2。
uj5u.com熱心網友回復:
當您運行 時ls -l *.cpp,擴展*到檔案名串列由您的 shell 執行。在這種情況下,ls已經收到檔案名串列。
的情況下QProcess,行程直接執行,無需shell。所以沒有任何一方參與執行擴展(稱為“globbing”)。
在您的情況下,我將用于QDir::entryList()獲取檔案串列,然后將結果作為引數傳遞。
未經測驗的示例代碼:
#include <QDebug>
#include <QProcess>
#include <QDir>
int main(int argc, char * argv[])
{
QStringList arguments = {"-l"};
QDir directory("."); // same as QDir()
QStringList filters = {"*.cpp"};
arguments << directory.entryList(filters);
QProcess ps;
ps.start("ls", arguments);
ps.waitForFinished();
qDebug() << ps.readAll();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400886.html
上一篇:無法使用洗掉釋放分配的記憶體
