从python中的Twisted协议获取裸套接字fd?
我想做的是将Twisted与python的stdlib中的Cmd模块结合起来 简而言之,我希望能够从一个连接的协议中获取裸体套接字fd对象,用作stdlib中cmd.cmd模块的stdin 总之,与服务器交互的客户端使用Cmd模块处理命令并将这些命令发送到服务器 在我的服务器上,我还希望使用与内置Cmd模块相同的命令处理方法。为此,我需要指定命令解释器的stdin和stdout。 我可以用内置的sockets模块轻松地实现这一点,但如果可能的话,我希望使用twisted 下面是一些代码,用于实现我对普通套接字的要求: (与telnet合作) 这几乎就是我想做的。我只是很快地把它打出来,所以我可能遗漏了什么。一半有效。当前,如果您将telnet连接到服务器,如:从python中的Twisted协议获取裸套接字fd?,python,sockets,twisted,Python,Sockets,Twisted,我想做的是将Twisted与python的stdlib中的Cmd模块结合起来 简而言之,我希望能够从一个连接的协议中获取裸体套接字fd对象,用作stdlib中cmd.cmd模块的stdin 总之,与服务器交互的客户端使用Cmd模块处理命令并将这些命令发送到服务器 在我的服务器上,我还希望使用与内置Cmd模块相同的命令处理方法。为此,我需要指定命令解释器的stdin和stdout。 我可以用内置的sockets模块轻松地实现这一点,但如果可能的话,我希望使用twisted 下面是一些代码,用于实现
telnet 127.0.0.1 2319
然后你发送“sayhi”什么都没发生。但是,如果在启动服务器的终端上键入“sayhi”(有一个(Cmd)提示符),则输出将转到telnet客户端。所以cmd.cmd的stdout正在工作。但不是stdin。这可能与telnet默认发送CR-LF('\r\n')有关。其中cmd模块可能只侦听\n
那么,如何从twisted中的协议获取fd或文件对象,以实现我在这里尝试使用裸套接字实现的功能呢
还有关于连接到服务器的telnet的哪些输入未注册到CmdProcessor的任何见解吗
欢迎提供任何建议、提示或建议。(等等,不,没有指针。)
谢谢。我建议您可以看看
通常,Twisted的要点是而不是直接使用Python套接字对象。这是Twisted工作的一大部分。当您想使用Twisted与网络交互时,如果您考虑的是最低级别,您可以使用Twisted的API—协议和传输。您可以添加use\u rawinput=False
class CmdProcessor(cmd.Cmd, object):
use_rawinput = False
def __init__(self, sock, addr):
....
这将产生来自telnet的对sayhi的回复谢谢!这解决了我的一个问题。但它应该是:self.use_rawinput=false哦,nvm,我知道你把它放在哪里了。(在init上面,这是有效的:)好的,谢谢你推荐到沙井。是的,我知道同时使用普通插座和扭曲插座有点不合适。我只是在学习扭曲,不知道是否可以做到。另外,我需要一些带有fd或fileno()的东西来用作stdin和stdout。
class CmdProcessor(cmd.Cmd, object):
use_rawinput = False
def __init__(self, sock, addr):
....