Qt QProcess 不适用于包含通配符的参数

Qt QProcess desn't work with arguments containing wildcard charecters

我想将包含星号的参数传递给 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();
}

我无法像 shell 那样得到 ls -l *.cpp 运行。使通配符适用于 QProcess 的正确方法是什么?我正在使用随 Debian 稳定版一起提供的 Qt 5.15.2。

当您 运行 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();
}