python调用shell 不设置shell的环境变量时,对于中文等特殊字符会处理失败,这时需要设置环境变量
调用shell,这里使用 subprocess 模块 来调用shell
注意:下文中的“your shell command” 代表你你自己的shell命令,比如 “ls”
方法1:
在shell命令的字符串前,加上 "LANG=en_US.UTF-8; export LANG; LC_ALL=en_US.UTF-8; export LC_AL; "
shell_command = "LANG=en_US.UTF-8; export LANG; LC_ALL=en_US.UTF-8; export LC_ALL; your shell command"
subprocess.call(shell_command, shell=True)
方法2:
调用subprocess.call函数时,增加env参数
subprocess.call("your shell command", env={"LANG": "en_US.UTF-8", "LC_ALL": "en_US.UTF-8"}, shell=True)
方法3:
设置python的环境变量;
python的环境变量在 os.environ (是个字典)里,可以修改此字典,但是官方文档上说有可能会造成内存泄露
os.putenv(varname, value)可以设置环境变量,注意:调用此参数不会影响os.environ,但是会让 subprocess模块生效
在调用subprocess模块前,调用下面的代码,那么subprocess执行的shell命令的环境变量里面就会增加下面的变量:LANG, LC_ALL
os.putenv("LANG", "en_US.UTF-8")
os.putenv("LC_ALL", "en_US.UTF-8")
验证方式:
shell_command = "env" # 输出shell当前的环境变量
subprocess.call(shell_command, shell=True) # 输出的环境变量里面 没有 LANG LC_ALL
os.putenv("LANG", "en_US.UTF-8")
os.putenv("LC_ALL", "en_US.UTF-8")
subprocess.call(shell_command, shell=True) # 输出的环境变量里面 包含了 LANG LC_ALL