diff --git a/FWCore/PyDevParameterSet/src/PyBind11ProcessDesc.cc b/FWCore/PyDevParameterSet/src/PyBind11ProcessDesc.cc index 3d24668722316..bca75c9f16927 100644 --- a/FWCore/PyDevParameterSet/src/PyBind11ProcessDesc.cc +++ b/FWCore/PyDevParameterSet/src/PyBind11ProcessDesc.cc @@ -34,12 +34,24 @@ PyBind11ProcessDesc::PyBind11ProcessDesc(std::string const& config, int argc, ch pybind11::initialize_interpreter(); edm::python::initializePyBind11Module(); prepareToRead(); + { +#if PY_MAJOR_VERSION >= 3 + typedef std::unique_ptr WArgUPtr; + std::vector v_argv; + std::vector vp_argv; + v_argv.reserve(argc); + vp_argv.reserve(argc); + for (int i = 0; i < argc; i++) { + v_argv.emplace_back(Py_DecodeLocale(argv[i], NULL), &PyMem_RawFree); + vp_argv.emplace_back(v_argv.back().get()); + } + + wchar_t **argvt = vp_argv.data(); +#else + char **argvt = argv; +#endif - if ( argc > 0 ) { - pybind11::list argvList; - for ( int i=0; i #include #include +#include #include namespace edm { @@ -15,10 +16,7 @@ void template pybind11::list toPython11List(const std::vector & v) { - pybind11::list result; - for(const auto & i: v) { - result.append(i); - } + pybind11::list result=pybind11::cast(v); return result; }