Просмотр исходного кода

idf_py: fix the ESPPORT environ variable type issue

Python 2 expect the environ variables are all of type 'str', but
sometimes wrong 'unicode' type is given.

Here we force all variables that are not str to become str.
Michael (XIAO Xufeng) 6 лет назад
Родитель
Сommit
cff1815177
1 измененных файлов с 7 добавлено и 0 удалено
  1. 7 0
      tools/idf_py_actions/tools.py

+ 7 - 0
tools/idf_py_actions/tools.py

@@ -77,6 +77,13 @@ def run_tool(tool_name, args, cwd, env=dict()):
     env_copy = dict(os.environ)
     env_copy.update(env)
 
+    if sys.version_info[0] < 3:
+        # The subprocess lib cannot accept environment variables as "unicode". Convert to str.
+        # This encoding step is required only in Python 2.
+        for (key, val) in env_copy.items():
+            if not isinstance(val, str):
+                env_copy[key] = val.encode(sys.getfilesystemencoding() or 'utf-8')
+
     try:
         # Note: we explicitly pass in os.environ here, as we may have set IDF_PATH there during startup
         subprocess.check_call(args, env=env_copy, cwd=cwd)