@@ -439,6 +439,34 @@ namespace
439439 std::transform (wideArgv.begin (), wideArgv.end (), wideArgvPtrs.begin (), [](std::vector<wchar_t >& wide) { return &wide[0 ]; });
440440 return wideArgvPtrs;
441441 }
442+
443+ std::vector<wchar_t > getProgramName (const std::vector<std::string>& argv)
444+ {
445+ size_t name_len = argv[0 ].size ();
446+ std::vector<wchar_t > program_name (name_len + 1 );
447+ mbstowcs (&program_name[0 ], argv[0 ].c_str (), name_len + 1 );
448+ return program_name;
449+ }
450+
451+ void setPythonArgv (const std::vector<std::string>& argv)
452+ {
453+ auto wideArgv = wideArgvFromArgv (argv);
454+ auto wideArgvPtrs = wideArgvPtrsFromWideArgv (wideArgv);
455+
456+ int argsOffset = 0 ;
457+ auto scriptFlag1 = std::find (argv.begin (), argv.end (), " -s" );
458+ auto scriptFlag2 = std::find (argv.begin (), argv.end (), " --script" );
459+ if (scriptFlag1 != argv.end ())
460+ {
461+ argsOffset = scriptFlag1 - argv.begin () + 1 ;
462+ }
463+ else if (scriptFlag2 != argv.end ())
464+ {
465+ argsOffset = scriptFlag2 - argv.begin () + 1 ;
466+ }
467+
468+ PySys_SetArgv (wideArgvPtrs.size () - argsOffset, &wideArgvPtrs[argsOffset]);
469+ }
442470}
443471
444472void PythonInterpreter::initialize (bool needProgramName, const std::string& commandLine, const boost::filesystem::path& libPath)
@@ -447,22 +475,14 @@ void PythonInterpreter::initialize(bool needProgramName, const std::string& comm
447475
448476 if (needProgramName)
449477 {
450- size_t name_len = argv[0 ].size ();
451- std::vector<wchar_t > program_name (name_len + 1 );
452- mbstowcs (&program_name[0 ], argv[0 ].c_str (), name_len + 1 );
453-
454- // std::cerr << "Initializing Python ..." << std::endl;
455- this ->private_ ->setProgramName (program_name);
478+ this ->private_ ->setProgramName (getProgramName (argv));
456479 // TODO: remove debug print when confident python initialization is stable
457480 // std::wcerr << "initialize program name=" << this->private_->programName() << std::endl;
458481 }
459482
460483 initialize_eventhandler (needsSpecialPythonPathTreatment (commandLine), libPath);
461484
462- auto wideArgv = wideArgvFromArgv (argv);
463- auto wideArgvPtrs = wideArgvPtrsFromWideArgv (wideArgv);
464-
465- PySys_SetArgv (argv.size (), &wideArgvPtrs[0 ]);
485+ setPythonArgv (argv);
466486
467487 {
468488 auto out = [](const std::string& s)
0 commit comments