[英]python: os.getenv returns none with sudo?
我在/etc/bash.bashrc
設置了環境變量LIBRARY_PATH
,最后添加了export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
。
當我嘗試從python獲取env變量時:
ipython
import os
print os.getenv('LIBRARY_PATH')
一切運作良好,它打印/usr/local/cuda/lib64:
.
但是當我用sudo
調用ipython時:
sudo ipython
import os
pront os.getenv('LIBRARY_PATH')
我一無所獲。 我想這是關於用戶的env變量,但是什么是ditails? 我在/etc/bash.bashrc
中設置LIBRARY_PATH
,這被稱為'系統范圍的bashrc文件'。
那么如何在python中使用sudo獲取正確的env變量?
如果您希望sudo
通過環境變量(通常被認為是安全隱患),請使用sudo -E
。
請注意,它是執行bashrc文件中的命令的bash
。 顯然, ipython
不是bash
,並且sudo
不啟動shell進程,更不用說bash進程了,只是為了運行你請求它運行的命令。 因此,沒有任何bashrc文件將由sudo
命令或sudo
子進程執行。 當然,你可以告訴sudo
運行一個bash進程:
sudo bash -c ipython
但是,如果bash
檢測到它正在sudo進程中運行,則它不會執行啟動文件。
有關sudo
如何清理環境的更多信息,請鍵入man 5 sudoers
並跳至Command environment
部分。
如果在/root/.bash_profile中設置環境變量,那么在使用sudo時可能會獲得所需的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.