[python-win32] How to enable pywin to evaluate -X utf8 flag
Mark Hammond
mhammond at skippinet.com.au
Tue Jun 6 10:38:03 EDT 2023
That error typically means your Python code raised an exception before
the service could be started. You probably need some way to track that
down - eg, some way to discover stdout/stderr from your service -
win32traceutil etc might help depending on how the service is
configured. Does the demo itself work? Does it work without the
command-line mods?
Mark
On 2023-06-06 9:57 a.m., Gualtiero Scotti wrote:
> Thank you Mark for your response, and your explanation.You are right,
> python.exe is not involved but I thought you handled the flag in your
> embedded calls..
> When I try to start service it doesn't start and the error message is:
> *
> Error starting service: The service did not respond to the start or
> control request in a timely fashion.*
> *
> *
> _svc_name_ = 'XXXXXXXXXXXXXXX' _svc_display_name_ =
> 'XXXXXXXXXXXXXXXXXXX' _svc_description_ = 'SXXXXXXXXXXXXXXX'
> _exe_name_ = sys.executable _exe_args_ = '-X utf8 "' +
> os.path.abspath(__file__) + '"'
> *
> *
> When I take a look to the service on Regedit I've the following situation:
> ImagePath = *"C:\Program Files
> (x86)\snapp-device-manager-win32\Python\python.exe" -X utf8
> "C:\Program Files (x86)\xxxxxxxxxxxxxx\winservice_launcher32.py"*
> I can't find any logs about failure.... windows doesn't help me......
> image.png
>
> Thanks in advance for your availability.
> Best regards
>
> Il giorno mar 6 giu 2023 alle ore 15:05 Mark Hammond
> <mhammond at skippinet.com.au> ha scritto:
>
> 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
>> <tierox at gmail.com> 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
>> <skippy.hammond at gmail.com> 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
>>> python-win32 at python.org
>>> https://mail.python.org/mailman/listinfo/python-win32
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/python-win32/attachments/20230606/78cd36da/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 64598 bytes
Desc: not available
URL: <https://mail.python.org/pipermail/python-win32/attachments/20230606/78cd36da/attachment-0001.png>
More information about the python-win32
mailing list