Re: How to enable pywin to evaluate -X utf8 flag
Mark Hammond <[email protected]> Tue, 6 Jun 2023 09:05:40 -0400
| Newsgroups | gmane.comp.python.windows |
|---|---|
| Message-ID | <[email protected]> |
pythonservice.exe doesn't "wrap" python.exe - it's a stand-alone executable which embeds Python. Thus there's no way to pass a cmd-line param to python.exe as python.exe isn't involved. You could patch pythonservice.exe to handle that arg, then do whatever it is python.exe does with that arg. If you told me more about what went wrong with using python.exe as the executable for the service we might be able to work something out there, but "doesn't work" has never been a useful starting point. Cheers, Mark On 2023-06-06 2:56 a.m., Gualtiero Scotti wrote: > HI Mark and Hi all, > as I wrote previously Mark's solution did not work for me. I need > pythonsevice.exe is able to pass -X utf8 parameter to python > interpreter or in alternative is able to evaluate evaluate the > environment variable PYTHONUTF8=1. Any suggestions? > Please help me. > Thanks in advance > > > Il giorno lun 5 giu 2023 alle ore 10:51 Gualtiero Scotti > <[email protected]> ha scritto: > > HI Mark, > I've tried your solution but it doesn't work. When calling python > directly, service fails to start. > When i use > #_exe_name_ = sys.executable #_exe_args_ = ' -X utf8 ' + '"' + > os.path.abspath(sys.argv[0]) + '"' > service are directly linked to my python app without using > pythonservice.exe. ( I saw this on Regedit) > > _As you wrote on your example:_ > _ > _ > > # This is an example of a service hosted by python.exe rather than > # pythonservice.exe. > > # *Note that it is very rare that using python.exe is a better option* > # than the default pythonservice.exe - the latter has better error > handling > # so that if Python itself can't be initialized or there are very > early > # i*mport errors, you will get error details written to the event > log*. When > # using python.exe instead, you are forced to wait for the > interpreter startup > # and imports to succeed before you are able to effectively setup > your own > # error handling. > > *# So in short, please make sure you *really* want to do this, > otherwise just > # stick with the default.* > * > * > I need to use pythonservice.exe but I don't understand how it > wraps my python application. Is there a way to tell to > pythonservice.exe to call python with some interpreter arguments? > Thanks in advance. > * > * > > Il giorno gio 1 giu 2023 alle ore 17:05 Mark Hammond > <[email protected]> ha scritto: > > https://github.com/mhammond/pywin32/blob/main/win32/Demos/service/nativePipeTestService.py > is a demo of using a service using python.exe and supports > specifying the command-line, so that might be an option? > > Mark > > On 2023-06-01 5:28 a.m., Gualtiero Scotti wrote: >> Hi, I need to start my python application through windows >> service. For this purpose I use pywin32. >> I'm not able to make a Python instance to evaluate the -X uf8 >> flag. >> >> This flag must be passed during python invocation only and >> not when it is already started. >> After some investigations I've found the service launch >> *pythonservice.exe* wrapper but I don't know how to pass the >> flag to the Python interpreter. >> >> Is there another option to set this flag? It is possible to >> set an env variable *PYTHONUTF8=1 * but pythonservice.exe >> doesn't seem to evaluate it... >> * >> * >> *My environment* >> *- Windows 11 Home 22H2* >> *- Python 3.11.1* (tags/v3.11.1:a7a450f, Dec 6 2022, >> 19:43:28) [MSC v.1934 32 bit (Intel)] on win32 >> - *Pywin32 305* >> - *Pywin32-ctypes 0.2.0* >> >> *Python documentation* >> >> >> 4.7. UTF-8 mode¶ >> <https://docs.python.org/3/using/windows.html#utf-8-mode> >> >> New in version 3.7. >> >> Windows still uses legacy encodings for the system encoding >> (the ANSI Code Page). Python uses it for the default encoding >> of text files (e.g. |locale.getencoding()| >> <https://docs.python.org/3/library/locale.html#locale.getencoding>). >> >> This may cause issues because UTF-8 is widely used on the >> internet and most Unix systems, including WSL (Windows >> Subsystem for Linux). >> >> You can use the Python UTF-8 Mode >> <https://docs.python.org/3/library/os.html#utf8-mode> to >> change the default text encoding to UTF-8. You can enable the >> Python UTF-8 Mode >> <https://docs.python.org/3/library/os.html#utf8-mode> via the >> |-X utf8| command line option, or the >> |PYTHONUTF8=1| environment variable. See |PYTHONUTF8| >> <https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUTF8> for >> enabling UTF-8 mode, and Excursus: Setting environment >> variables >> <https://docs.python.org/3/using/windows.html#setting-envvars> for >> how to modify environment variables. >> >> When the Python UTF-8 Mode >> <https://docs.python.org/3/library/os.html#utf8-mode> is >> enabled, you can still use the system encoding (the ANSI Code >> Page) via the “mbcs” codec. >> >> Note that adding |PYTHONUTF8=1| to the default environment >> variables will affect all Python 3.7+ applications on your >> system. If you have any Python 3.7+ applications which rely >> on the legacy system encoding, it is recommended to set the >> environment variable temporarily or use the |-X utf8| command >> line option. >> >> Note >> >> Even when UTF-8 mode is disabled, Python uses UTF-8 by >> default on Windows for: >> >> * >> >> Console I/O including standard I/O (see *PEP 528* >> <https://peps.python.org/pep-0528/> for details). >> >> * >> >> The filesystem encoding >> <https://docs.python.org/3/glossary.html#term-filesystem-encoding-and-error-handler> (see >> *PEP 529* <https://peps.python.org/pep-0529/> for details). >> >> from -> https://docs.python.org/3/using/windows.html >> >> Please help me! >> Thanks in advance >> * >> * >> >> _______________________________________________ >> python-win32 mailing list >> [email protected] >> https://mail.python.org/mailman/listinfo/python-win32 > _______________________________________________ python-win32 mailing list [email protected] https://mail.python.org/mailman/listinfo/python-win32