Python中调用Popen指定英文环境
Python中调用外部程序时,如果遇到中文环境,容易产生编码混乱。
如: 使用Popen调用svn diff程序比较文件,如果lang=zh_CN,而比较文件也为中文编码
这时,svn程序返回的消息是GBK编码,当文件编码为utf-8是,会同时存在两种编码,Python无法处理这种情况。
可以通过subprocess.Popen(cmd, env={‘LANG’:’en’}),指定程序运行环境为英文
import subprocess
fn = "./sublime_svn.md"
command = ["D:/Program Files/Subversion/bin/svn.exe",
'diff',
fn]
print("command: %r" % command)
proc = subprocess.Popen(command, stdout=subprocess.PIPE, env={'lang': 'en'})
try:
outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
print("outs %r, errs %r" % (b'\n'.join(outs.split(b'\r\n')), errs))