我正在基于Twisted的插件方法设计一个简单的LoRaWAN UDP服务器。在两台PC中给我不同的结果。
我的项目中有以下插件。
$ tree lorawan_server/
lorawan_server/
├── LoRaWANPktFwd.py
├── run.sh
├── shutdown_twistd.sh
├── start_plugin_twistd.sh
└── twisted
└── plugins
└── LoRaWANPktFwd_plugin.py
LoRaWANPktFwd.py:
#!/usr/bin/env python
#coding: utf-8
from __future__ import print_function
import getopt
import os
import sys
import string
import struct
import binascii
import time
import uuid
from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor, protocol, defer
from twisted.python import log
from twisted.enterprise import adbapi
class LoRaWANPktFwd(DatagramProtocol):
def datagramReceived(self, data, addr):
# A simple echo server
self.transport.write(data, addr)
def main():
log.startLogging(sys.stdout)
reactor.listenUDP(1700, LoRaWANPktFwd())
reactor.run()
if __name__ == "__main__":
main()
LoRaWANPktFwd_plugin.py:
from zope.interface import implements
from twisted.application.service import IServiceMaker
from twisted.application import internet
from twisted.plugin import IPlugin
from twisted.python import usage
from LoRaWANPktFwd import LoRaWANPktFwd
class Options(usage.Options):
optParameters = [["port","p", 1700, "The port number to listen on."]]
class LoRaWANPktFwdServiceMaker(object):
implements(IServiceMaker, IPlugin)
tapname = "LoRaWAN"
description = "A Raw UDP-based LoRaWAN Packet Forwarder server."
options = Options
def makeService(self, options):
return internet.UDPServer(int(options["port"]), LoRaWANPktFwd())
serviceMaker = LoRaWANPktFwdServiceMaker()
如果我输入:
twistd LoRaWAN
然后Ubuntu 18.04将抱怨以下问题:
/usr/bin/twistd: Unknown command: LoRaWAN
然后Ubuntu 12.04将开始运行,并在同一文件夹中创建twistd.pid和twistd.log。
我不知道为什么会这样。有没有最新版本的插件更新?还是和systemd有关?
答案 0 :(得分:0)
Twisted 15和Twisted 17.9在自动将$PWD
包括在sys.path
中方面具有不同的行为。 Twisted 15可以使用,而Twisted 17.9可以。
将包含您的项目的路径添加到PYTHONPATH
中(也许通过创建virtualenv并使用pip在其中进行可编辑的项目安装),并且Twisted 17.9将找到代码,因此也找到了您的插件。