Twisted插件在Ubuntu 12.04和18.04中的结果不同

时间:2018-09-25 12:33:04

标签: python ubuntu twisted

我正在基于Twisted的插件方法设计一个简单的LoRaWAN UDP服务器。在两台PC中给我不同的结果。

  1. Aliyun ECS,Ubuntu 12.04(32bit),Python 2.7.3,Twisted 15.0.0
  2. 物理PC,Ubuntu 18.04(64位),Python 2.7.15,Twisted 17.9.0

我的项目中有以下插件。

$ 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有关?

1 个答案:

答案 0 :(得分:0)

Twisted 15和Twisted 17.9在自动将$PWD包括在sys.path中方面具有不同的行为。 Twisted 15可以使用,而Twisted 17.9可以。

将包含您的项目的路径添加到PYTHONPATH中(也许通过创建virtualenv并使用pip在其中进行可编辑的项目安装),并且Twisted 17.9将找到代码,因此也找到了您的插件。