使用Paramiko设置环境变量

时间:2017-12-22 16:39:50

标签: python unix ssh environment-variables paramiko

我在我的本地使用paramiko来ssh进入unix服务器。我想从服务器上的本地启动一个可执行文件。可执行文件当前从local / paramiko失败,因为当我使用paramiko ssh时没有正确设置LD_LIBRARY_PATH环境变量,但是当我使用putty并以交互方式工作时它会自动设置。当我通过putty登录到机器时,可执行文件按预期工作,但是当我通过paramiko从我的本地登录时,exectuable返回一个错误,导致LD_LIBRARY_PATH环境未正确设置。

当我使用putty登录计算机时,admin .login文件为变量LD_LIBRARY_PATH指定了一系列路径。它看起来像这样:

setenv LD_LIBRARY_PATH path1:path2:path3:...

但是,通过paramiko登录时,不启动此管理脚本,我需要手动设置LD_LIBRARY_PATH变量。

我的连接如下:

ssh = pk.SSHClient()
ssh.set_missing_host_key_policy(pk.AutoAddPolicy())
ssh.connect(hostname='server', username='user', password='password')

我想要运行的命令如下:

stdin, stdout, stderr = ssh.exec_command('nohup executablefile')

如何设置我的LD_LIBRARY_PATH,然后使用paramiko的exec_command执行我的程序,还是应该寻找不同的函数?

2 个答案:

答案 0 :(得分:0)

我修补并找到了一个简单的解决方案。

可以通过ssh.connect()明确告诉远程计算机环境路径。诀窍是使用(type='hidden')将一系列命令绑定在一起。

foreach($result as $r){
<div class='comments'>
echo"<p>$r['com_text']</p>";
<button> reply <button>
etc
</div>

<div class="reply_container>
<form>
<textarea></textarea>
<input type="hidden value="value_from_database" name="">
<input type="hidden value="" name="">
<button type="submit></button>
</form>
</div>
}

答案 1 :(得分:0)

可能在命令生效之前设置了变量。这仅用于说明。这将需要翻译为paramiko的等效项。

class Join_Operator
{

    class Departamento
    {
        public int idDepto { get; set; }
        public string nombreDepto { get; set; }
    }

    class Empleado
    {
        public int idDepto { get; set; }
        public string nombreEmpleado { get; set; }
    }

    public void JoinTables()
    {
        List<Departamento> departamentos = new List<Departamento>();
        departamentos.Add(new Departamento { idDepto = 1, nombreDepto = "Arquitectura" });
        departamentos.Add(new Departamento { idDepto = 2, nombreDepto = "Programación" });

        List<Empleado> empleados = new List<Empleado>();
        empleados.Add(new Empleado { idDepto = 1, nombreEmpleado = "John Doe." });
        empleados.Add(new Empleado { idDepto = 2, nombreEmpleado = "Jim Bell" });

        var joinList = (from e in empleados
                        join d in departamentos on
                        e.idDepto equals d.idDepto
                        select new
                        {
                            nombreEmpleado = e.nombreEmpleado,
                            nombreDepto = d.nombreDepto
                        });
        foreach (var dato in joinList)
        {
            Console.WriteLine("{0} es empleado del departamento de {1}", dato.nombreEmpleado, dato.nombreDepto);
        }
    }
}

应返回类似以下内容的内容。这是远程主机中环境的内容。

ssh remote-host 'COOKS=32 env'