Hi Aiden, If set kwargs["stdout"] = sys.stdout, then stdout and stderr messages from sub process will directly write to sys.stdout. I think this patch works because sys.stdout.encoding is the correct encoding. So what do you think if we fix this Non-Ascii issue by Changing the line of message = stdout.decode(encoding='utf-8', errors='ignore') #for compatibility in python 2 and 3 to message = stdout.decode(encoding=sys.stdout.encoding , errors='ignore') #for compatibility in python 2 and 3
Otherwise, I think this patch may need to take care of the code after this line kwargs["stdout"] = sys.stdout, I mean p.communicate() will return empty string after your change, and the following code would be useless. Thanks, Bob -----Original Message----- From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Park, Aiden Sent: Thursday, December 12, 2019 6:43 AM To: devel@edk2.groups.io Subject: [edk2-devel] [PATCH] [edk2/BaseTools] edksetup.bat stuck on unicode locale Windows This issue happens under two conditions. 1. Unicode language environment in Windows 2. Call 'edksetup.bat forcerebuild' with python subprocess.call() Steps to reproduce C:\edk2>python Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) Type help, copyright, credits or license for more information. >>> import subprocess >>> subprocess.call(['edksetup.bat', 'forcerebuild']) The edksetup.bat stuck at 'nmake cleanall'. One of multi-threads is on deadlock when python handles stdout and stderr in a subprocess pipe only if the outputs include unicode chars. Only stderr will be handled in the pipe same as a single thread call. Reported in Slim Bootloader. https://github.com/slimbootloader/slimbootloader/issues/478 Local fix has been made in Slim Bootloader. https://github.com/slimbootloader/slimbootloader/pull/490 Signed-off-by: Aiden Park <aiden.p...@intel.com> --- BaseTools/Source/C/Makefiles/NmakeSubdirs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BaseTools/Source/C/Makefiles/NmakeSubdirs.py b/BaseTools/Source/C/Makefiles/NmakeSubdirs.py index 356f5ac..c77bfb0 100644 --- a/BaseTools/Source/C/Makefiles/NmakeSubdirs.py +++ b/BaseTools/Source/C/Makefiles/NmakeSubdirs.py @@ -33,7 +33,7 @@ def RunCommand(WorkDir=None, *Args, **kwargs): if "stderr" not in kwargs: kwargs["stderr"] = subprocess.STDOUT if "stdout" not in kwargs: - kwargs["stdout"] = subprocess.PIPE + kwargs["stdout"] = sys.stdout p = subprocess.Popen(Args, cwd=WorkDir, stderr=kwargs["stderr"], stdout=kwargs["stdout"]) stdout, stderr = p.communicate() message = "" -- 2.10.2.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#52327): https://edk2.groups.io/g/devel/message/52327 Mute This Topic: https://groups.io/mt/68205236/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-