python 调用 shell 时 设置环境变量

原创
2016/09/07 17:48
阅读数 9.9K

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
展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部