簡體   English   中英

python:os.getenv用sudo返回none?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM