python 調用 shell 時 設置環境變量

python調用shell 不設置shell的環境變量時,對於中文等特殊字符會處理失敗,這時須要設置環境變量
調用shell,這裏使用 subprocess 模塊 來調用shellpython

注意:下文中的「your shell command」 表明你你本身的shell命令,好比 「ls shell

方法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參數code

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
相關文章
相關標籤/搜索