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