您的位置:首页 > 编程语言 > Python开发

python 调用 shell 时 设置环境变量

2016-09-07 17:48 603 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python shell 环境变量