QIODevice :: read (QProcess): устройство не открыто - PullRequest
0 голосов
/ 22 сентября 2018

Я работаю над QtCreator и хочу использовать скрипт на python с xml-файлом из QT Windows.

Файл открыт, но я не могу использовать скрипт:

  QString p_stdout = _process.readAll();

показать мне: QIODevice :: read (QProcess): устройство не открыто

Вот мой код:

   // EXEC PYTHON SCRIPT


    QStringList args = (QStringList() << script_path << employesDesires << file_path) ; // parameters
    QString program = "Python";                                                         // program


    int exitCode = _process.execute( program, args );

    _process.waitForFinished(-1);

//      _process.open(QIODevice::OpenMode()) ;

    QString p_stdout = _process.readAll();

    QString s = QString::number(exitCode);

    ui->labelResult->setText(s);

exitCode return 0

Я искал на многих форумах, но не могу найти решение, которое могу понять ..

1 Ответ

0 голосов
/ 22 сентября 2018

Из документации , QProcess::execute ...

Запускает программу программы с аргументами аргументов в новом процессе, ожидает его завершения и затем возвращаеткод выхода процесса.Любые данные, которые новый процесс записывает в консоль, перенаправляются в вызывающий процесс

Таким образом, вы никогда не увидите экземпляр QProcess в открытом состоянии - он фактически закрывается к моменту возврата вызова.

Вместо этого вы, вероятно, захотите использовать QProcess::start ...

_process.start(program, args);

, который будет выполнять указанный процесс как дочерний элемент вызывающей стороны и делать его вывод доступнымчерез различные каналы чтения.

Кроме того, обратите внимание, что, хотя QProcess::waitForFinished представляется полезной процедурой, обычно лучше подключаться к различным сигналам и реагировать соответствующим образом - будь то обработкаошибки или чтение из stdout / stderr и т. д.

...