From 145a4cd2e68cd9b9bc61ed5f8539267c19a3a73c Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Fri, 16 Nov 2018 15:59:14 +0200 Subject: [PATCH] Add APP_DIR/python to PATH on Windows to simplify deployment --- .../value-editor/formattersmanager.cpp | 41 ++++++++++++------- src/modules/value-editor/formattersmanager.h | 3 ++ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/modules/value-editor/formattersmanager.cpp b/src/modules/value-editor/formattersmanager.cpp index eab3999f..37894e3f 100644 --- a/src/modules/value-editor/formattersmanager.cpp +++ b/src/modules/value-editor/formattersmanager.cpp @@ -7,40 +7,39 @@ #include #include #include -#include ValueEditor::FormattersManager::FormattersManager() {} QPair ValueEditor::FormattersManager::readOutputFromExternalProcess( const QStringList &cmd, const QByteArray &processInput, const QString &wd) { - QProcess formatterProcess; - formatterProcess.setWorkingDirectory(wd); - formatterProcess.start(cmd[0], cmd.mid(1)); + auto formatterProcess = createProcess(); + formatterProcess->setWorkingDirectory(wd); + formatterProcess->start(cmd[0], cmd.mid(1)); if (processInput.size()) { - formatterProcess.write(processInput.constData(), processInput.size()); - formatterProcess.waitForBytesWritten(); - formatterProcess.closeWriteChannel(); + formatterProcess->write(processInput.constData(), processInput.size()); + formatterProcess->waitForBytesWritten(); + formatterProcess->closeWriteChannel(); } - if (!formatterProcess.waitForStarted(3000)) { + if (!formatterProcess->waitForStarted(3000)) { emit error(QString("Cannot start process %1: %2") .arg(cmd.join(" ")) - .arg(formatterProcess.errorString())); + .arg(formatterProcess->errorString())); return {QByteArray(), QByteArray()}; } - if (!formatterProcess.waitForFinished(3000)) { - formatterProcess.kill(); + if (!formatterProcess->waitForFinished(3000)) { + formatterProcess->kill(); emit error(QString("Process %1 was killed by timeout: %2") .arg(cmd.join(" ")) - .arg(formatterProcess.errorString())); + .arg(formatterProcess->errorString())); return {QByteArray(), QByteArray()}; } - return {formatterProcess.readAllStandardOutput(), - formatterProcess.readAllStandardError()}; + return {formatterProcess->readAllStandardOutput(), + formatterProcess->readAllStandardError()}; } QJsonObject ValueEditor::FormattersManager::readJsonFromExternalProcess( @@ -285,3 +284,17 @@ void ValueEditor::FormattersManager::fillMapping() { index++; } } + +QSharedPointer ValueEditor::FormattersManager::createProcess() { + auto process = QSharedPointer(new QProcess()); + +#ifdef Q_OS_WIN32 + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("PATH", QString("%1/python;%2") + .arg(QCoreApplication::applicationDirPath()) + .arg(env.value("PATH", ""))); + process->setProcessEnvironment(env); +#endif + + return process; +} diff --git a/src/modules/value-editor/formattersmanager.h b/src/modules/value-editor/formattersmanager.h index 1f13b9c2..d7d30b5e 100644 --- a/src/modules/value-editor/formattersmanager.h +++ b/src/modules/value-editor/formattersmanager.h @@ -1,6 +1,7 @@ #pragma once #include #include +#include namespace ValueEditor { @@ -45,6 +46,8 @@ class FormattersManager : public QAbstractListModel { private: void fillMapping(); + QSharedPointer createProcess(); + QPair readOutputFromExternalProcess( const QStringList& cmd, const QByteArray& processInput, const QString& wd);