python实现ssh自动化登录遇到的坑
2015-10-19 17:20
387 查看
最近用python写了一个自动登录ssh命令的小工具,在所有功能都实现后,后来发现了一个小bug
就是登录之后的机器,在用vi或者是cat命令打开文件时发现会linux下屏幕只显示一半左右的问题
用的是pexpect模块,代码也是根据网上的例子改的,而且手动ssh的话也没有这个问题
在用一上午的时间排除是其他原因导致的问题后,就去网上找了下pexpect的源码
根据pexpect先调用了spawn函数,然后发现屏幕只显示了24行,。。。。Linux下可用stty size查看屏幕显示的大小
看到源码后,发现
,在调用spawn函数时有更改系统参数的地方,而且正好也是24,80
然后,就猜测可能跟这个有关系,然后在调用interact()函数之前就先调用一下setwinsize(row,column)函数,设置成自己想要的大小。。。。
然后再次登录用stty size就发现已更改生效。。。。
到这里本该结束了。。。。。。。。但是实际上应该是根据自己的本地的设置来显示,而不应该是固定大小。。。。。
然后又再次抱着摸索的精神,去查了下资料,发现python中有fcntl这个模块可以解决这个问题,在调用spawn之前先用fcntl.ioctl模块得到本地的环境中窗口的大小,保存起来后面再调用setwinsize恢复。。:需要导入termios,fcntl包
s= struct.pack("HHHH",0,0,0,0)
a= struct.unpack('hhhh', fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ , s))
其中a中存放了屏幕的大小,我们只需要其前两个参数即可。。。。在调用spawn函数之后再恢复即可:setwinsize(a[0],a[1])
这样就能够解决linux下终端只显示一半的问题。。。。。。。。。
其实说这么多。。。。告诉大家个干货。。。用shell实现不会有相关的问题。。。我分析应该是shell中调用spawn时不会修改系统的变量。。。。。
就是登录之后的机器,在用vi或者是cat命令打开文件时发现会linux下屏幕只显示一半左右的问题
用的是pexpect模块,代码也是根据网上的例子改的,而且手动ssh的话也没有这个问题
在用一上午的时间排除是其他原因导致的问题后,就去网上找了下pexpect的源码
根据pexpect先调用了spawn函数,然后发现屏幕只显示了24行,。。。。Linux下可用stty size查看屏幕显示的大小
看到源码后,发现
,在调用spawn函数时有更改系统参数的地方,而且正好也是24,80
然后,就猜测可能跟这个有关系,然后在调用interact()函数之前就先调用一下setwinsize(row,column)函数,设置成自己想要的大小。。。。
然后再次登录用stty size就发现已更改生效。。。。
到这里本该结束了。。。。。。。。但是实际上应该是根据自己的本地的设置来显示,而不应该是固定大小。。。。。
然后又再次抱着摸索的精神,去查了下资料,发现python中有fcntl这个模块可以解决这个问题,在调用spawn之前先用fcntl.ioctl模块得到本地的环境中窗口的大小,保存起来后面再调用setwinsize恢复。。:需要导入termios,fcntl包
s= struct.pack("HHHH",0,0,0,0)
a= struct.unpack('hhhh', fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ , s))
其中a中存放了屏幕的大小,我们只需要其前两个参数即可。。。。在调用spawn函数之后再恢复即可:setwinsize(a[0],a[1])
这样就能够解决linux下终端只显示一半的问题。。。。。。。。。
其实说这么多。。。。告诉大家个干货。。。用shell实现不会有相关的问题。。。我分析应该是shell中调用spawn时不会修改系统的变量。。。。。
相关文章推荐
- Python快速教程
- Spark SQL Table Join(Python)
- Python 自定义模块位置
- python函数基础知识
- Python爬虫--抓取糗事百科段子
- Python scrapy run with Unhandled error in Deferred解决方案
- Python3包机制
- python打印中文字典
- python pandas库基础
- python list中delete符合条件的元素
- Python练习题
- 任意输入一个字符串,输出它的所有子串。Python练习(未考虑去重问题)
- python 之 subprocess模块
- 概率,悖论,以及理性人原则(python实现)
- 解决Python.h: No such file or directory
- python不能按退格
- python下setuptools安装
- Python 3 爬虫之批量下载字帖图片
- 使用python抓取js动态加载的网页
- python中使用xlrd、xlwt读写excel(xls格式)