2013-02-21 54 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')