BaseTools: Update python tool to call external tools with shell true mode

Python tool may run from source as the dos batch files. So, update python
code to call external tools with shell true mode.

Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Cc: Michael Kinney <michael.d.kinney@intel.com>
Cc: Erik Bjorge <erik.c.bjorge@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com>
diff --git a/BaseTools/Source/Python/Common/VpdInfoFile.py b/BaseTools/Source/Python/Common/VpdInfoFile.py
index cc79ee2..d45fb4c 100644
--- a/BaseTools/Source/Python/Common/VpdInfoFile.py
+++ b/BaseTools/Source/Python/Common/VpdInfoFile.py
@@ -233,14 +233,15 @@
     OutputBinFileName = os.path.join(OutputDir, "%s.bin" % BaseName)

           

     try:

-        PopenObject = subprocess.Popen([ToolPath,

+        PopenObject = subprocess.Popen(' '.join([ToolPath,

                                         '-o', OutputBinFileName, 

                                         '-m', OutputMapFileName,

                                         '-q',

                                         '-f',

-                                        VpdFileName],

+                                        VpdFileName]),

                                         stdout=subprocess.PIPE, 

-                                        stderr= subprocess.PIPE)

+                                        stderr= subprocess.PIPE,

+                                        shell=True)

     except Exception, X:

         EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, ExtraData="%s" % (str(X)))

     (out, error) = PopenObject.communicate()

diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py
index be02119..b003c67 100644
--- a/BaseTools/Source/Python/build/build.py
+++ b/BaseTools/Source/Python/build/build.py
@@ -268,12 +268,13 @@
     if not isinstance(Command, list):

         if platform.system() != 'Windows':

             Command = Command.split()

+            Command = ' '.join(Command)

 

     Proc = None

     EndOfProcedure = None

     try:

         # launch the command

-        Proc = Popen(Command, stdout=PIPE, stderr=PIPE, env=os.environ, cwd=WorkingDir, bufsize=-1)

+        Proc = Popen(Command, stdout=PIPE, stderr=PIPE, env=os.environ, cwd=WorkingDir, bufsize=-1, shell=True)

 

         # launch two threads to read the STDOUT and STDERR

         EndOfProcedure = Event()