【发布时间】:2018-08-16 05:35:12
【问题描述】:
我正在编写一些 python 软件来轮询 modbus 连接并将数据存储在 SQL 数据库中。为了查看机器是否作为快速测试工作,我正在制作一个简单的控制台样式“HMI”,您可以通过 telnet 进入。这是有问题的代码和错误。
from twisted.internet.protocol import Protocol, Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor
from twisted.internet import task
from twisted.internet import protocol
#from screenhelp import ScreenHelp ** Not relevant to error
class Screen(Protocol):
def __init__(self, factory):
self.factory = factory
self.connection = False
self.loop = task.LoopingCall(screenRefresh)
self.loopDeferred = None
self.stack = []
self.cs = ScreenHelp()
def connectionMade(self):
self.loopDeferred = self.loop.start(self,5)
def connectionLost(self, reason):
self.loop.stop(self)
def dataReceived(self, data):
self.stack.append(data)
def screenRefresh(self):
#self.transport.write(self.cs.clr()) ** Not relevent - issues clear screen command.
for x in self.stack:
self.transport.write(x)
class ScreenFactory(Factory):
def buildProtocol(self, addr):
return Screen()
def main():
endpoint1 = TCP4ServerEndpoint(reactor, 64000)
endpoint1.listen(ScreenFactory)
reactor.listenTCP(5000, fact)
reactor.run()
if __name__ == "__main__":
main()
错误是:
File "/usr/lib/python3/dist-packages/twisted/internet/protocol.py", line 135, in buildProtocol
p = self.protocol()
TypeError: __init__() missing 1 required positional argument: 'factory'
提前感谢您的帮助!
【问题讨论】:
-
这是整个错误吗?
-
该错误消息似乎与您发布的代码无关。
p = self.protocol()行没有出现。但是,在您实际发布的代码中,您会收到类似的错误,因为您在实例化Screen类时没有传递factory参数。
标签: python python-3.x twisted twisted.internet