From e34cc79dad10ea39fd01f03d4e2de5a6b680b9f9 Mon Sep 17 00:00:00 2001 From: Gabriele Date: Fri, 27 Feb 2015 14:00:00 +0100 Subject: [PATCH] Use python3 and python2 instead of python on Linux Prefer python3 over python2 when both are available. Both python2 and python3 should always exists. More info at: http://legacy.python.org/dev/peps/pep-0394/ --- src/core/utils/misc.cpp | 36 +++++++++++++++++++++++++++++ src/core/utils/misc.h | 1 + src/searchengine/searchengine.cpp | 4 ++-- src/searchengine/supportedengines.h | 3 ++- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/core/utils/misc.cpp b/src/core/utils/misc.cpp index 7860f774c..2647b41f2 100644 --- a/src/core/utils/misc.cpp +++ b/src/core/utils/misc.cpp @@ -232,6 +232,26 @@ int Utils::Misc::pythonVersion() static int version = -1; if (version < 0) { QProcess python_proc; +#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) + /* + * On Unix-Like Systems python2 and python3 should always exist + * http://legacy.python.org/dev/peps/pep-0394/ + */ + python_proc.start("python3", QStringList() << "--version", QIODevice::ReadOnly); + if (python_proc.waitForFinished()) { + if (python_proc.exitCode() == 0) { + version = 3; + return 3; + } + } + python_proc.start("python2", QStringList() << "--version", QIODevice::ReadOnly); + if (python_proc.waitForFinished()) { + if (python_proc.exitCode() == 0) { + version = 2; + return 2; + } + } +#else python_proc.start("python", QStringList() << "--version", QIODevice::ReadOnly); if (!python_proc.waitForFinished()) return -1; if (python_proc.exitCode() < 0) return -1; @@ -244,10 +264,26 @@ int Utils::Misc::pythonVersion() version = 3; else version = 2; +#endif } return version; } +QString misc::pythonExecutable() +{ +#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) + /* + * On Unix-Like Systems python2 and python3 should always exist + * http://legacy.python.org/dev/peps/pep-0394/ + */ + if (pythonVersion() == 3) + return "python3"; + if (pythonVersion() == 2) + return "python2"; +#endif + return "python"; +} + // return best userfriendly storage unit (B, KiB, MiB, GiB, TiB) // use Binary prefix standards from IEC 60027-2 // see http://en.wikipedia.org/wiki/Kilobyte diff --git a/src/core/utils/misc.h b/src/core/utils/misc.h index c69061c20..dc003674f 100644 --- a/src/core/utils/misc.h +++ b/src/core/utils/misc.h @@ -56,6 +56,7 @@ namespace Utils QPoint screenCenter(QWidget *win); #endif int pythonVersion(); + QString pythonExecutable(); // return best userfriendly storage unit (B, KiB, MiB, GiB, TiB) // use Binary prefix standards from IEC 60027-2 // see http://en.wikipedia.org/wiki/Kilobyte diff --git a/src/searchengine/searchengine.cpp b/src/searchengine/searchengine.cpp index 5aa947091..70955e779 100644 --- a/src/searchengine/searchengine.cpp +++ b/src/searchengine/searchengine.cpp @@ -232,7 +232,7 @@ void SearchEngine::on_search_button_clicked() { // Changing the text of the current label currentSearchTab->getCurrentLabel()->setText(tr("Results")+" (0):"); // Launch search - searchProcess->start("python", params, QIODevice::ReadOnly); + searchProcess->start(Utils::Misc::pythonExecutable(), params, QIODevice::ReadOnly); searchTimeout->start(180000); // 3min } @@ -272,7 +272,7 @@ void SearchEngine::downloadTorrent(QString engine_url, QString torrent_url) { params << engine_url; params << torrent_url; // Launch search - downloadProcess->start("python", params, QIODevice::ReadOnly); + downloadProcess->start(Utils::Misc::pythonExecutable(), params, QIODevice::ReadOnly); } } diff --git a/src/searchengine/supportedengines.h b/src/searchengine/supportedengines.h index a03db1b41..defe3531b 100644 --- a/src/searchengine/supportedengines.h +++ b/src/searchengine/supportedengines.h @@ -42,6 +42,7 @@ #include #include "core/utils/fs.h" +#include "core/utils/misc.h" #include "core/preferences.h" class SearchCategories: public QObject, public QHash { @@ -150,7 +151,7 @@ public slots: QStringList params; params << Utils::Fs::toNativePath(Utils::Fs::searchEngineLocation()+"/nova2.py"); params << "--capabilities"; - nova.start("python", params, QIODevice::ReadOnly); + nova.start(Utils::Misc::pythonExecutable(), params, QIODevice::ReadOnly); nova.waitForStarted(); nova.waitForFinished(); QString capabilities = QString(nova.readAll());