|
7 | 7 | #include <QDirIterator>
|
8 | 8 | #include <QJsonDocument>
|
9 | 9 | #include <QJsonObject>
|
10 |
| -#include <QProcess> |
11 | 10 |
|
12 | 11 | ValueEditor::FormattersManager::FormattersManager() {}
|
13 | 12 |
|
14 | 13 | QPair<QByteArray, QByteArray>
|
15 | 14 | ValueEditor::FormattersManager::readOutputFromExternalProcess(
|
16 | 15 | const QStringList &cmd, const QByteArray &processInput, const QString &wd) {
|
17 |
| - QProcess formatterProcess; |
18 |
| - formatterProcess.setWorkingDirectory(wd); |
19 |
| - formatterProcess.start(cmd[0], cmd.mid(1)); |
| 16 | + auto formatterProcess = createProcess(); |
| 17 | + formatterProcess->setWorkingDirectory(wd); |
| 18 | + formatterProcess->start(cmd[0], cmd.mid(1)); |
20 | 19 |
|
21 | 20 | if (processInput.size()) {
|
22 |
| - formatterProcess.write(processInput.constData(), processInput.size()); |
23 |
| - formatterProcess.waitForBytesWritten(); |
24 |
| - formatterProcess.closeWriteChannel(); |
| 21 | + formatterProcess->write(processInput.constData(), processInput.size()); |
| 22 | + formatterProcess->waitForBytesWritten(); |
| 23 | + formatterProcess->closeWriteChannel(); |
25 | 24 | }
|
26 | 25 |
|
27 |
| - if (!formatterProcess.waitForStarted(3000)) { |
| 26 | + if (!formatterProcess->waitForStarted(3000)) { |
28 | 27 | emit error(QString("Cannot start process %1: %2")
|
29 | 28 | .arg(cmd.join(" "))
|
30 |
| - .arg(formatterProcess.errorString())); |
| 29 | + .arg(formatterProcess->errorString())); |
31 | 30 | return {QByteArray(), QByteArray()};
|
32 | 31 | }
|
33 | 32 |
|
34 |
| - if (!formatterProcess.waitForFinished(3000)) { |
35 |
| - formatterProcess.kill(); |
| 33 | + if (!formatterProcess->waitForFinished(3000)) { |
| 34 | + formatterProcess->kill(); |
36 | 35 | emit error(QString("Process %1 was killed by timeout: %2")
|
37 | 36 | .arg(cmd.join(" "))
|
38 |
| - .arg(formatterProcess.errorString())); |
| 37 | + .arg(formatterProcess->errorString())); |
39 | 38 | return {QByteArray(), QByteArray()};
|
40 | 39 | }
|
41 | 40 |
|
42 |
| - return {formatterProcess.readAllStandardOutput(), |
43 |
| - formatterProcess.readAllStandardError()}; |
| 41 | + return {formatterProcess->readAllStandardOutput(), |
| 42 | + formatterProcess->readAllStandardError()}; |
44 | 43 | }
|
45 | 44 |
|
46 | 45 | QJsonObject ValueEditor::FormattersManager::readJsonFromExternalProcess(
|
@@ -285,3 +284,17 @@ void ValueEditor::FormattersManager::fillMapping() {
|
285 | 284 | index++;
|
286 | 285 | }
|
287 | 286 | }
|
| 287 | + |
| 288 | +QSharedPointer<QProcess> ValueEditor::FormattersManager::createProcess() { |
| 289 | + auto process = QSharedPointer<QProcess>(new QProcess()); |
| 290 | + |
| 291 | +#ifdef Q_OS_WIN32 |
| 292 | + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); |
| 293 | + env.insert("PATH", QString("%1/python;%2") |
| 294 | + .arg(QCoreApplication::applicationDirPath()) |
| 295 | + .arg(env.value("PATH", ""))); |
| 296 | + process->setProcessEnvironment(env); |
| 297 | +#endif |
| 298 | + |
| 299 | + return process; |
| 300 | +} |
0 commit comments