python調用shell 不設置shell的環境變量時,對於中文等特殊字符會處理失敗,這時須要設置環境變量
調用shell,這裏使用 subprocess 模塊 來調用shellpython
注意:下文中的「your shell command
」 表明你你本身的shell命令,好比 「ls
」shell
在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)
調用subprocess.call函數時,增長env
參數code
subprocess.call("your shell command", env={"LANG": "en_US.UTF-8", "LC_ALL": "en_US.UTF-8"}, shell=True)
設置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