python-在Reactor.run()之后向扭曲的ssh输入命令的合理方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-在Reactor.run()之后向扭曲的ssh输入命令的合理方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2774字,纯文字阅读大概需要4分钟。
内容图文
伙计们,这是关于python扭曲ssh lib的问题.
我看到的所有示例代码,甚至包括作为基于twisted.conch.ssh的ssh客户端的生产代码,都以这种模式与服务器交互:
>准备一些命令以远程运行;
>定义回叫;
>启动反应堆,然后暂停以获取新的反馈;
在Reactor.run()之后,我再也没有发现有人试图向sshd传递命令,脚本只是等待他们.我认为可以派生或生成东西来发送命令.但是,由于Twisted的优点之一是其多路分解机制,因此在作为服务器运行时,它不必派生处理传入的请求.我是否可以说不派生(作为客户端脚本)向服务器连续发送请求是合理的要求?
有什么想法吗?
TIA.
解决方法:
joefis的回答基本上是正确的,但我敢打赌一些例子会有所帮助.首先,有几种方法可以在反应堆启动后立即运行一些代码.
这很简单:
def f():
print "the reactor is running now"
reactor.callWhenRunning(f)
另一种方法是使用定时事件,尽管可能没有理由使用callWhenRunning来做到这一点:
reactor.callLater(0, f)
您还可以使用在以下方面实现callWhenRunning的基础API:
reactor.addSystemEventTrigger('after', 'startup', f)
您也可以使用服务.这涉及更多,因为它涉及到使用twistd(1)(或其他将服务系统挂接到反应堆的东西).但是您可以编写这样的类:
from twisted.application.service import Service
class ThingDoer(Service):
def startService(self):
print "The reactor is running now."
然后编写一个.tac文件,如下所示:
from twisted.application.service import Application
from thatmodule import ThingDoer
application = Application("Do Things")
ThingDoer().setServiceParent(application)
最后,您可以使用twistd(1)运行此.tac文件:
$twistd -ny thatfile.tac
当然,这仅告诉您在反应堆运行后如何做一件事情,这与您要的不完全一样.但是,这是相同的想法-定义一些事件处理程序,并通过调用该处理程序来请求接收事件;当它被调用时,您就可以做事.同样的想法也适用于您对Conch所做的任何事情.
您可以在Conch examples中看到它,例如在sshsimpleclient.py中,我们有:
class CatChannel(channel.SSHChannel):
name = 'session'
def openFailed(self, reason):
print 'echo failed', reason
def channelOpen(self, ignoredData):
self.data = ''
d = self.conn.sendRequest(self, 'exec', common.NS('cat'), wantReply = 1)
d.addCallback(self._cbRequest)
def _cbRequest(self, ignored):
self.write('hello conch\n')
self.conn.sendEOF(self)
def dataReceived(self, data):
self.data += data
def closed(self):
print 'got data from cat: %s' % repr(self.data)
self.loseConnection()
reactor.stop()
在此示例中,channelOpen是在打开新通道时调用的事件处理程序.它将请求发送到服务器.它返回一个Deferred,并附加了回调.该回调是一个事件处理程序,当请求成功时(在这种情况下,当cat执行时)将被调用. _cbRequest是它附加的回调,该方法进行下一步-将一些字节写入通道,然后关闭它.然后是dataReceived事件处理程序,该事件处理程序在通过通道接收到字节时调用,而关闭事件处理程序在通道关闭时调用.
因此,您可以在此处看到四个不同的事件处理程序,其中一些正在启动操作,这些操作最终将触发以后的事件处理程序.
因此,回到关于一件事又一件事的问题,如果您想一个接一个地打开两个cat通道,那么在关闭的事件处理程序中可以打开一个新的通道(而不是像这样停止反应器)例).
内容总结
以上是互联网集市为您收集整理的python-在Reactor.run()之后向扭曲的ssh输入命令的合理方法全部内容,希望文章能够帮你解决python-在Reactor.run()之后向扭曲的ssh输入命令的合理方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。