es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Cuando se pasan argumentos que contienen caracteres comodín a QProcess, es necesario establecer QProcess::ProcessChannelMode en QProcess::MergedChannels. Esto se puede hacer llamando a QProcess::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 establecer ProcessChannelMode en MergedChannels, 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();
    }
    “`

Comments are closed.