Как вы запускаете приложение Twisted через Python (а не через Twisted)?

Я работаю над обучением Twisted и наткнулся на что-то, что я не уверен, что я очень люблю - "Twisted Command Prompt". Я возился с Twisted на моей машине с Windows и пытался запустить пример "Чат":

from twisted.protocols import basic

class MyChat(basic.LineReceiver):
    def connectionMade(self):
        print "Got new client!"
        self.factory.clients.append(self)

    def connectionLost(self, reason):
        print "Lost a client!"
        self.factory.clients.remove(self)

    def lineReceived(self, line):
        print "received", repr(line)
        for c in self.factory.clients:
            c.message(line)

    def message(self, message):
        self.transport.write(message + '\n')


from twisted.internet import protocol
from twisted.application import service, internet

factory = protocol.ServerFactory()
factory.protocol = MyChat
factory.clients = []

application = service.Application("chatserver")
internet.TCPServer(1025, factory).setServiceParent(application)

Однако, чтобы запустить это приложение как Twisted-сервер, я должен запустить его через "Twisted Command Prompt" с помощью команды:

twistd -y chatserver.py

Есть ли способ изменить код (установить параметры Twisted configuration и т.д.), чтобы я мог просто запустить его через:

python chatserver.py

У меня Googled, но поисковые термины кажутся слишком неопределенными, чтобы возвращать любые значимые ответы.

Спасибо.

Ответ 1

Я не знаю, лучший ли это для этого, но то, что я делаю, вместо:

application = service.Application("chatserver")
internet.TCPServer(1025, factory).setServiceParent(application)

вы можете сделать:

from twisted.internet import reactor
reactor.listenTCP(1025, factory)
reactor.run()

Сумаризовать, если вы хотите иметь два параметра (twistd и python):

if __name__ == '__main__':
    from twisted.internet import reactor
    reactor.listenTCP(1025, factory)
    reactor.run()
else:
    application = service.Application("chatserver")
    internet.TCPServer(1025, factory).setServiceParent(application)

Надеюсь, что это поможет!

Ответ 2

Не путайте "Twisted" с "twistd" . Когда вы используете "twistd" , вы запускаете программу с помощью Python. "twistd" - это программа Python, которая, помимо прочего, может загружать приложение из файла .tac (как вы здесь делаете).

"Twisted Command Prompt" - это удобное средство для виртуализации, упрощающее работу с людьми в Windows. Все, что он делает, это установить %PATH% для включения каталога, содержащего программу "twistd" . Вы можете запустить twistd из обычной командной строки, если вы правильно установите% PATH% или вызовите его с полным путем.

Если вас это не устраивает, возможно, вы можете расширить свой вопрос, включив описание проблем, возникающих при использовании "twistd" .

Ответ 3

В окнах вы можете создать файл .bat с вашей командой в нем, использовать полные пути, а затем просто нажать на него, чтобы запустить.

Например, я использую:

runfileserver.bat:
C:\program_files\python26\Scripts\twistd.py -y C:\source\python\twisted\fileserver.tac

Ответ 4

Возможно, один из run или runApp в twisted.scripts.twistd будет работать для вас. Пожалуйста, дайте мне знать, если это так, хорошо бы знать!

Ответ 5

Я не использовал себя. Тем не менее, вы можете попробовать посмотреть, является ли twistd файлом самого python. Я бы предположил, что он просто управляет загрузкой соответствующих скрученных библиотек с правильного пути.