python shell 继承 环境变量_python 调用 shell 时 设置环境变量

在Python中使用subprocess模块调用shell命令处理中文等特殊字符时可能会失败,解决办法是在命令前设置环境变量或者通过env参数传递环境变量。方法包括:1) 在shell命令字符串前添加环境变量设置;2) 使用subprocess.call的env参数;3) 修改os.environ或使用os.putenv设置环境变量,然后通过subprocess调用验证环境变量是否生效。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值