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.
This commit is contained in:
Michael (XIAO Xufeng) 2020-01-22 02:45:46 +08:00
parent 3c44ab4192
commit cff1815177

View file

@ -77,6 +77,13 @@ def run_tool(tool_name, args, cwd, env=dict()):
env_copy = dict(os.environ) env_copy = dict(os.environ)
env_copy.update(env) 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: try:
# Note: we explicitly pass in os.environ here, as we may have set IDF_PATH there during startup # 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) subprocess.check_call(args, env=env_copy, cwd=cwd)