=item B<Encoding> I<Name>
The default encoding for Unicode objects you pass to collectd. If you omit this
- option it will default to B<ascii> on I<Python 2> and B<utf-8> on I<Python 3>.
- This is hardcoded in Python and will ignore everything else, including your
- locale.
+ option it will default to B<ascii> on I<Python 2>. On I<Python 3> it will
+ always be B<utf-8>, as this function was removed, so this will be silently
+ ignored.
+ These defaults are hardcoded in Python and will ignore everything else,
+ including your locale.
=item B<ModulePath> I<Name>
-Appends I<Name> to B<sys.path>. You won't be able to import any scripts you
+Prepends I<Name> to B<sys.path>. You won't be able to import any scripts you
wrote unless they are located in one of the directories in this list. Please
note that it only has effect on plugins loaded after this option. You can
use multiple B<ModulePath> lines to add more than one directory.
#endif
static int cpy_init_python() {
- char *argv = "";
PyObject *sys;
PyObject *module;
#ifdef IS_PY3K
+ wchar_t *argv = L"";
/* Add a builtin module, before Py_Initialize */
PyImport_AppendInittab("collectd", PyInit_collectd);
+ #else
+ char *argv = "";
#endif
Py_Initialize();
} else if (strcasecmp(item->key, "Encoding") == 0) {
if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_STRING)
continue;
+ #ifdef IS_PY3K
+ NOTICE("python: \"Encoding\" was used in the config file but Python3 was used, which does not support changing encodings. Ignoring this.");
+ #else
/* Why is this even necessary? And undocumented? */
if (PyUnicode_SetDefaultEncoding(item->values[0].value.string))
cpy_log_exception("setting default encoding");
+ #endif
} else if (strcasecmp(item->key, "LogTraces") == 0) {
if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_BOOLEAN)
continue;
cpy_log_exception("python initialization");
continue;
}
- if (PyList_Append(sys_path, dir_object) != 0) {
- ERROR("python plugin: Unable to append \"%s\" to "
+ if (PyList_Insert(sys_path, 0, dir_object) != 0) {
+ ERROR("python plugin: Unable to prepend \"%s\" to "
"python module path.", dir);
cpy_log_exception("python initialization");
}