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