|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
小知识:CentOS并不是第一个提供商业支持的RHEL克隆版,其他企业例如Oracle也提供了基于RedHat的自己的企业Linux发布版。
常常应用paramiko对象对几百台装备停止治理,然则因为办事器自己或是收集缘由,有时前往值回不来,然后法式就看在那边一向期待,这个时刻后须要设置一个超时价。paramiko模块中履行敕令代码以下:
stdin,stdout,stderr=s.exec_command(command)
这个处所在模块中只要一个参数,paramiko默许在这个是其实不能设置超时价。
其实paramiko自己是可以在这个处所设置超时价的,只是默许情形下是没有这个选项的,须要在paramiko的装置目次中修正他的源代码,让他支撑,在代码中是有这个接口的。之所以他没有这个这个超时价,我想是由于开辟方斟酌有些有些敕令能够履行的时光比拟长,好比年夜文件的紧缩等,须要很长的时光能力履行完,超时价假如设置的话,有能够会中止敕令的履行,索性留下接口,其实不设置超时价。然则我们用这个模块批量的去操作多台装备的话,有时超时价是很有需要的。
修正paramiko源代码办法以下:
找到C:Python27Libsite-packagesparamiko目次,上面有个client.py文件,文件中找到这段代码:
- 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
复制代码
修正为:
- 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是异次元的服务器也是! |
|