paramiko通过ssh远程登陆服务器执行命令出现错误的问题

最近为了要实现对远程linux服务器的上传,下载文件 ,和对远程服务器操作的命令,因此用到了python的一个模块paramiko来实现,上传文件和下载文件这些基本命令是很容易实现的,还有就是通过exec_command(cmd)命令能对服务器进行一些基本的操作。。。
但是在这个过程中我遇到了一些问题(学校的服务器是由许多人用的,我在服务器目录下安装了anaconda),由于我要运行的命令是TextBoxes,因此需要当我运行python /TextBoxes/demo.py的时候出现了如下问题(博主通过xshell连上服务器运行该命令是没有错的,因此相信是通过paramiko执行命令的时候出错了),首先出现的错误是:

    no model named numpy

这貌似是一个矩阵运算的库,这个包我是安装了的,但是为啥会出现这样的问题呢?后来才发现是因为通过exec_command(cmd)执行的命令python /TextBoxes/demo.py 是在默认的环境下运行的,也就是主目录下,而不是我的家目录下,因此我将执行python环境换成绝对路径

    **/path/anaconda2/bin/python**

,这样改之后我以为万事大吉了,没想到又出现ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory这个问题,这里是由于cuda没有加入到自己的环境中,这里我在~/.bashrc中加入了如下代码

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64" 
export CUDA_HOME=/usr/local/cuda

这里特别感谢这位博主传送门这样就能成功了。
这里还有个技巧,由于之前我用的python路径是绝对路径,那么能不能让paramiko通过ssh登陆到服务器之后,使用自己目录下的环境呢?(默认是主服务器下的环境)这里可以通过执行如下命令,该命令是在登上服务器之后执行bash_profile文件,这里感谢这位博主

stdin, stdout, stderr = s.exec_command(". ./.bash_profile;echo $PATH")

这样就大功告成了。对于想了解bash_profile的朋友可以看下这篇文章传送门
这位博主讲的真心很赞,它对ssh连接远程主机执行脚本的环境变量问题做了一个详细的解释。

博主被这个paramiko折磨了两三天把,一直找不到解决方法,还好顺着思路将其成功解决。

你可能感兴趣的:(ssh)