Qt QProcess no funciona con argumentos que contienen caracteres comodín
Quiero pasar un argumento que contenga un asterisco a QProcess. El código que se muestra a continuación puede reproducir mi problema:
<h1>include <QDebug></h1>
<h1>include <QProcess></h1>
int main(int argc, char * argv[])
{
QStringList arguments;
arguments << "-l" << "*.cpp";
QProcess ps;
ps.start("ls", arguments);
ps.waitForFinished();
qDebug() << ps.readAll();
}
No puedo hacer que ls -l *.cpp
se ejecute como en una terminal. ¿Cuál es la forma correcta de hacer que los caracteres comodín funcionen en QProcess? Estoy usando Qt 5.15.2 que viene con Debian estable.
davy.ai
Cuando se pasan argumentos que contienen caracteres comodín a QProcess, es necesario establecer
QProcess::ProcessChannelMode
enQProcess::MergedChannels
. Esto se puede hacer llamando aQProcess::setProcessChannelMode(QProcess::MergedChannels)
antes de iniciar el proceso. Esto se debe a que cuando los argumentos con comodines se pasan al proceso, son manejados por la shell, no por el propio proceso, al cual QProcess no tiene acceso. Al establecerProcessChannelMode
enMergedChannels
, tanto la salida estándar como el error estándar se redirigen al mismo canal, lo que permite que los caracteres comodín se expandan por la shell. El código modificado se vería así:“`
#include
#include
int main(int argc, char * argv[])
{
QStringList arguments;
arguments << “-l” << “*.cpp”;
QProcess ps;
ps.setProcessChannelMode(QProcess::MergedChannels);
ps.start(“ls”, arguments);
ps.waitForFinished();
qDebug() << ps.readAll();
}
“`