我正在完全跟踪模式下运行子进程并使用 logger.info() 显示它
> std = subprocess.run(subprocess_cmd, shell=True, > universal_newlines=True, stdout=subprocess.PIPE, > stderr=subprocess.PIPE) > > all_stdout = all_stdout + std.stdout + ‘\n’ all_stderr = all_stderr + > std.stderr + ‘\n’ > > logger.info(‘\nstdout:\n’ + all_stdout + ‘\nstderr:\n’ + all_stderr)
但是在打印子流程时出现以下错误。
UnicodeDecodeError:“utf-8”编解码器无法决定位置 4024984 中的字节 0x90:无效的起始字节
我尝试将 universal_lines 设置为 False 但它抛出 TypeError: 必须是 str,而不是 bytes。
我也尝试过这个 - std = subprocess.run(subprocess_cmd, shell=True, stdout=subprocess.PIPE,
> stderr=subprocess.PIPE, env=environ, encoding=‘utf-8’)
这给了我同样的 UnicodeDecodeError。
使用编码
encoding="unicode_escape"
而不是 encoding="utf-8"
部分不相关,但对于完全相同的错误,仅使用我的数据
byte_data.decode("latin-1")
有效