I have an issue with QProcess in Qt 5.5.1 under Linux. I have the following QProcess code to launch a command-line process (also a Qt executable):

    player.process = ProcessPointer(new QProcess(this));
connect(player.process.data(), &QProcess::readyReadStandardOutput, this, &Mediator::slot_read_player_process_stdout); connect(player.process.data(), &QProcess::readyReadStandardError, this, &Mediator::slot_read_player_process_stderr); connect(player.process.data(), static_cast<void (QProcess::*)(QProcess::ProcessError)>(&QProcess::error),
                    this, &Mediator::slot_player_process_error);

    player.process->setProgram(player_path);
    player.process->setArguments(args);
    player.process->start(QIODevice::ReadOnly);
    player.process->waitForStarted();

When I run this code, I get...nothing. No errors, no slots invoked, no process running, nothing in the system log. However, when I run this code instead:

    char data[1024];
    QString command = QString("%1 %2").arg(player_path).arg(args.join(" "));
    FILE* fp = popen(command.toLatin1().constData(), "r");
    while(fgets(data, sizeof(data) - 1, fp) != NULL)
        Logger::inst()->log_info(data);

The process starts and functions as expected.

I had a look at the code for QProcess, which seems to be doing standard fork/exec launching of the process, whereas, if I'm not mistaken, popen() uses the shell to run it. Is that the only difference here? Should I be running the QProcess version through the shell explicitly then to make it function?

Thanks.
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to