我正在使用Python重写一个遗留Windows应用程序,并在Linux上运行。最初,新应用程序需要调用遗留应用程序,以便在仍然使用遗留应用程序的客户和使用新应用程序的客户之间有一致的结果。
因此,我有一个Linux盒,就在一个Windows框旁边,我希望Linux盒上有一个进程在Windows框上执行一个命令,并捕获结果(同步)。
我最初的想法是在Windows框上编写web服务,但这意味着除了旧的应用程序之外,还要在Windows机器上运行web服务器。
因此,我认为使用Twisted.Conch可能只允许我在网络上执行一个命令,而不需要额外的运行web服务器的开销,但是我假设在Windows机器上运行ssh服务器也有开销。
除了web服务或ssh之外,我还可以使用Python在另一台机器上启动同步进程,或者web服务或ssh是最好的方法?另外,如果web服务或ssh是追求的最佳途径,那么是否应该考虑使用Twisted?
发布于 2010-07-22 14:50:18
最后我和SSH + Twisted一起去了。在windows机器上,我将freeSSHd设置为Windows服务。在试图让帕拉米科去上班的过程中,为了让我的公钥/私钥工作,我遇到了很多麻烦,于是我决定尝试Twisted,只花了几分钟就能让它正常工作。因此,我在Twisted文档的基础上编写/窃取了这个文档,以便从Linux实现我所需要的SSH客户端。
from twisted.conch.ssh import transport
from twisted.internet import defer
from twisted.conch.ssh import keys, userauth
from twisted.conch.ssh import connection
from twisted.conch.ssh import channel, common
from twisted.internet import protocol, reactor
class ClientTransport(transport.SSHClientTransport):
def verifyHostKey(self, pubKey, fingerprint):
return defer.succeed(1)
def connectionSecure(self):
self.requestService(ClientUserAuth('USERHERE', ClientConnection()))
class ClientUserAuth(userauth.SSHUserAuthClient):
def getPassword(self, prompt=None):
return
def getPublicKey(self):
return keys.Key.fromString(data=publicKey)
def getPrivateKey(self):
return defer.succeed(keys.Key.fromString(data=privateKey))
class ClientConnection(connection.SSHConnection):
def serviceStarted(self):
self.openChannel(CatChannel(conn=self))
class CatChannel(channel.SSHChannel):
name = 'session'
def channelOpen(self, data):
data = 'abcdefghijklmnopqrstuvwxyz' * 300
self.return_data = ''
self.conn.sendRequest(self, 'exec', common.NS('C:\helloworld %-10000s' % data), wantReply=True)
def dataReceived(self, data):
self.return_data += data
def closed(self):
print "got %d bytes of data back from Windows" % len(self.return_data)
print self.return_data
self.loseConnection()
reactor.stop()
if __name__ == "__main__":
factory = protocol.ClientFactory()
factory.protocol = ClientTransport
reactor.connectTCP('123.123.123.123', 22, factory)
reactor.run()这真是太棒了!
发布于 2010-07-13 14:36:48
另一个选择是帕拉米科。它是一个实现SSH的Python库。我使用它远程执行命令,并将文件传输到运行SSH服务器的windows框中。问题是,由于windows命令shell的特殊性,它无法正确捕获windows上的stdout。基于扭曲的解决方案也可能存在同样的问题。
你想要捕捉什么样的结果?
发布于 2010-07-13 13:25:38
尝试QAM和RabbitMQ。
https://stackoverflow.com/questions/3237558
复制相似问题