diff --git a/src/core/misc.cpp b/src/core/misc.cpp
index 1bedf3a1d..348ea0cce 100644
--- a/src/core/misc.cpp
+++ b/src/core/misc.cpp
@@ -271,6 +271,26 @@ int 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;
@@ -283,10 +303,26 @@ int 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/misc.h b/src/core/misc.h
index 37430561b..0cd967abf 100644
--- a/src/core/misc.h
+++ b/src/core/misc.h
@@ -82,6 +82,7 @@ namespace misc
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 47b970e26..c8770fa03 100644
--- a/src/searchengine/searchengine.cpp
+++ b/src/searchengine/searchengine.cpp
@@ -235,7 +235,7 @@ void SearchEngine::on_search_button_clicked() {
//on change le texte du label courrant
currentSearchTab->getCurrentLabel()->setText(tr("Results")+" (0):");
// Launch search
- searchProcess->start("python", params, QIODevice::ReadOnly);
+ searchProcess->start(misc::pythonExecutable(), params, QIODevice::ReadOnly);
searchTimeout->start(180000); // 3min
}
@@ -275,7 +275,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(misc::pythonExecutable(), params, QIODevice::ReadOnly);
}
}
diff --git a/src/searchengine/supportedengines.h b/src/searchengine/supportedengines.h
index 62c568d3b..2ea9735d5 100644
--- a/src/searchengine/supportedengines.h
+++ b/src/searchengine/supportedengines.h
@@ -42,6 +42,7 @@
#include
#include "fs_utils.h"
+#include "misc.h"
#include "preferences.h"
class SearchCategories: public QObject, public QHash {
@@ -150,7 +151,7 @@ public slots:
QStringList params;
params << fsutils::toNativePath(fsutils::searchEngineLocation()+"/nova2.py");
params << "--capabilities";
- nova.start("python", params, QIODevice::ReadOnly);
+ nova.start(misc::pythonExecutable(), params, QIODevice::ReadOnly);
nova.waitForStarted();
nova.waitForFinished();
QString capabilities = QString(nova.readAll());