2013-02-21 55 views
0

當我通過SSH登錄遠程服務器,我看到LD_LIBRARY_PATH是:使用織物改變LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH 
:/usr/local/lib 

當我在Python中使用的織物,以運行在織物運行API相同的代碼,則結果是空的。

from fabric.api import * 
def test(): 
    run("echo $LD_LIBRARY_PATH") 

甚至當我嘗試使用結構更改LD_LIBRARY_PATH時,它根本不起作用。

from fabric.api import * 
def test(): 
    run("echo $LD_LIBRARY_PATH") 
    run("export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH") 

有誰知道爲什麼?

+0

這裏的答案很可能解釋了爲什麼:http://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-fewer-environment-variables-then-when-run -man – 2013-02-21 09:19:08

+0

在構造ssh時,您獲得的環境變量要少得多。從結構中導出LD_LIBRARY_PATH後,echo是否返回您設置的新路徑? – 2013-02-21 09:19:54

+0

我想,每個'run'函數都使用一個到遠程服務器的單獨鏈接,所以LD_LIBRARY_PATH在下一次運行時被設置爲空。 – holsety 2013-02-21 09:25:06

回答

0

我有同樣的問題,這裏有一個方法來解決它。您至少需要fabric 1.5.4我認爲要使用shell_env。

with shell_env(LD_LIBRARY_PATH ="/usr/local/lib"): 
    run('something')