仓酷云

标题: 来讲讲:python paramiko模块中设置履行敕令超时价 [打印本页]

作者: 不帅    时间: 2015-1-14 21:05
标题: 来讲讲:python paramiko模块中设置履行敕令超时价
小知识:CentOS并不是第一个提供商业支持的RHEL克隆版,其他企业例如Oracle也提供了基于RedHat的自己的企业Linux发布版。
常常应用paramiko对象对几百台装备停止治理,然则因为办事器自己或是收集缘由,有时前往值回不来,然后法式就看在那边一向期待,这个时刻后须要设置一个超时价。paramiko模块中履行敕令代码以下:
stdin,stdout,stderr=s.exec_command(command)
这个处所在模块中只要一个参数,paramiko默许在这个是其实不能设置超时价。
其实paramiko自己是可以在这个处所设置超时价的,只是默许情形下是没有这个选项的,须要在paramiko的装置目次中修正他的源代码,让他支撑,在代码中是有这个接口的。之所以他没有这个这个超时价,我想是由于开辟方斟酌有些有些敕令能够履行的时光比拟长,好比年夜文件的紧缩等,须要很长的时光能力履行完,超时价假如设置的话,有能够会中止敕令的履行,索性留下接口,其实不设置超时价。然则我们用这个模块批量的去操作多台装备的话,有时超时价是很有需要的。
修正paramiko源代码办法以下:
找到C:Python27Libsite-packagesparamiko目次,上面有个client.py文件,文件中找到这段代码:


  1. defexec_command(self,command,bufsize=-1):"""ExecuteacommandontheSSHserver.AnewL{Channel}isopenedandtherequestedcommandisexecuted.ThecommandsinputandoutputstreamsarereturnedaspythonC{file}-likeobjectsrepresentingstdin,stdout,andstderr.@paramcommand:thecommandtoexecute@typecommand:str@parambufsize:interpretedthesamewayasbythebuilt-inC{file()}functioninpython@typebufsize:int@return:thestdin,stdout,andstderroftheexecutingcommand@rtype:tuple(L{ChannelFile},L{ChannelFile},L{ChannelFile})@raiseSSHException:iftheserverfailstoexecutethecommand"""chan=self._transport.open_session()chan.exec_command(command)stdin=chan.makefile(wb,bufsize)stdout=chan.makefile(rb,bufsize)stderr=chan.makefile_stderr(rb,bufsize)returnstdin,stdout,stderr
复制代码

修正为:


  1. defexec_command(self,command,bufsize=-1,timeout=None):"""ExecuteacommandontheSSHserver.AnewL{Channel}isopenedandtherequestedcommandisexecuted.ThecommandsinputandoutputstreamsarereturnedaspythonC{file}-likeobjectsrepresentingstdin,stdout,andstderr.@paramcommand:thecommandtoexecute@typecommand:str@parambufsize:interpretedthesamewayasbythebuilt-inC{file()}functioninpython@typebufsize:int@return:thestdin,stdout,andstderroftheexecutingcommand@rtype:tuple(L{ChannelFile},L{ChannelFile},L{ChannelFile})@raiseSSHException:iftheserverfailstoexecutethecommand"""chan=self._transport.open_session()iftimeoutisnotNone:chan.settimeout(timeout)chan.exec_command(command)stdin=chan.makefile(wb,bufsize)stdout=chan.makefile(rb,bufsize)stderr=chan.makefile_stderr(rb,bufsize)returnstdin,stdout,stderr
复制代码

重要就修正了两个处所:
1、defexec_command(self,command,bufsize=-1,timeout=None)界说时加一个timeout=None;
2、在chan=self._transport.open_session()上面添加一个断定
iftimeoutisnotNone:
chan.settimeout(timeout)


那末在应用paramiko模块履行敕令时的代码以下:
stdin,stdout,stderr=s.exec_command(command,timeout=10)
如许就有一个超时价,履行敕令的超不时间为10s
小知识:得益于极为出色的稳定性,全球范围内无数著名网站均选用它,CentOS是异次元的服务器也是!
作者: 小妖女    时间: 2015-1-16 23:45
标题: 来讲讲:python paramiko模块中设置履行敕令超时价
Linux的成功就在于用最少的资源最短的时间实现了所有功能,这也是符合人类进化的,相信以后节能问题会日益突出。
作者: 金色的骷髅    时间: 2015-1-25 06:46
把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。
作者: 若天明    时间: 2015-2-8 07:27
在系统检测不到与Linux兼容的显卡,那么此次安装就可能不支持图形化界面安装,而只能用文本模式安装等等。
作者: admin    时间: 2015-2-25 03:48
现在的linux操作系统如redhat,难点,红旗等,都是用这么一个内核,加上其它的用程序(包括X)构成的。
作者: 谁可相欹    时间: 2015-3-7 20:14
生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的。
作者: 飘飘悠悠    时间: 2015-3-15 19:46
尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。
作者: 不帅    时间: 2015-3-22 05:07
熟悉系统的基本操作,Linux的图形界面直观,操作简便,多加上机练习就可熟悉操作,在Linux下学习办公软件等常用软件。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2