Windows Mercurial Python 3 Installer.
Matt Harbison
mharbison72 at gmail.com
Tue Dec 10 05:33:37 UTC 2019
On Mon, 09 Dec 2019 18:57:18 -0500, Tom Hindle <tom_hindle at sil.org> wrote:
> On 12/2/19 8:33 PM, Matt Harbison wrote:
>> One word of caution, you need to run `hg.exe`, not `hg`. I'm not sure
>> what's going on (I suspect it's at least in part because the legacy
>> stdio environment variable isn't set), but you won't get any output
>> from the latter.
>
> Thanks for the warning! I am seeing stdout not giving output when
> running hg.exe as well. (using python 3.8) (perhaps I did something
> wrong in the build and PYTHONLEGACYWINDOWSSTDIO isn't set in my hg.exe?)
>
> I see in ui._runpager: (mercurial/ui.py)
>
> that:
>
> os.dup2(pager.stdin.fileno(), procutil.stdout.fileno())
>
> and this SO question and python doc explains to me why this causes a
> problem:
>
> https://stackoverflow.com/questions/52373180/python-on-windows-handle-invalid-when-redirecting-stdout-writing-to-file
>
> https://docs.python.org/3/library/sys.html
>
>
> But setting the following fixes running both 'hg.exe' + 'python.exe hg'
>
> set PYTHONLEGACYWINDOWSSTDIO=1
There's a exewrapper.c in the codebase that gets compiled into hg.exe that
sets this internally when building against py3. So I doubt you screwed
anything up. I looked at updating setup.py to not create the usual
executables when building (because I think *they* are the problem), and
use that hg.exe instead. But I wasn't having a lot of luck with it and
gave up. Setting that environment variable should be good enough for now
for your testing.
More information about the Mercurial
mailing list