paramiko神器远程执行linux命令
一。paramiko及其依赖安装
由于工作的服务器不通外网,只能下载包及其依赖进行手动安装。
python版本2.7.16 + centos7
requirements.txt :
bcrypt-3.1.7
cffi-1.14.3
cryptography-3.1.1
enum34-1.1.10
paramiko-2.7.2
pycparser-2.20
pynacl-1.4.0
二。paramiko模块的简单使用
import paramiko ##1.创建一个ssh对象 client = paramiko.SSHClient() #2.解决问题:如果之前没有,连接过的ip,会出现选择yes或者no的操作, ##自动选择yes client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #3.连接服务器 client.connect(hostname='192.168.224.152', port=22, username='root', password='root') #4.执行操作 stdin,stdout, stderr = client.exec_command('ls /') #5.获取命令执行的结果 result=stdout.read().decode('utf-8') print(result) #6.关闭连接 client.close()
三。问题发现
1.若导入paramiko使用时报错如下:
ImportError: /usr/lib/panda3d/libpandaexpress.so: undefined symbol: PyUnicodeUCS4_AsWideChar
2.原因分析:
python2.7.*和某个你用的库编译时指定的UCS编码方式不对,python2.7.x默认是使用UCS2.
3.验证
import sys if sys.maxunicode > 65535: print 'UCS4 build' else: print 'UCS2 build'
4.问题修复
(1)重新编译python进行安装(若环境中python是大家共用的,请勿卸载,可自行指定目录安装供自己使用)
su - root
cd /root
mkdir -p /root/MyPython
wget https://www.python.org/ftp/python/2.7.17/Python-2.7.17.tgz
tar -xvf ./Python-2.7.17.tgz # 安装依赖 yum install openssl-devel libffi-devel xz-devel -y
yum install bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel -y
yum install ncurses-devel libpcap-devel zlib-devel tk-devel -y # 编译前配置 cd ./Python-2.7.17/ # 通过--prefix指定安装路径 ./configure --prefix=/root/MyPython --enable-shared #或者打开优化选项 ./configure --prefix=/root/MyPython --enable-shared --enable-optimizations --enable-unicode=ucs4 #则需据实际情况用加入如下选项重新编译 --enable-unicode=ucs4
或者 --enable-unicode=ucs2 # 编译安装 make
make altinstall
安装完成后重新进行第3步复验,若输出 UCS4 build 表示编译安装成功。
使用时需指定该python解释器执行python脚本。
(2)重新编译库.
如果使用的是./configure这样的编译方式,如果你的./configure --help没有unicode的选择,那么在./configure之后,
在config.h内增加
#define Py_UNICODE_SIZE 4
然后再make,make install之类的,就搞定拉.
本文地址:https://blog.csdn.net/qq_27525737/article/details/109017666
上一篇: Android四大组件之Activity启动流程源码实现详解
下一篇: 模型分类结果都分到一类