Можно ли удаленно использовать cmd-модуль Python с несколькими TCP-клиентами?

Я создал скрипт Python, который я запускаю на своем сервере, который предоставляет простой интерфейс командной строки для запуска пользовательских скриптов конфигурации. Я использую модуль cmd, чтобы сделать это, и он прекрасно работает до сих пор:

from cmd import Cmd

class MyPrompt(Cmd):

    def do_run1(self, args):
        print("running config1")

    def do_run2(self, args):
        print("running config2")

if __name__ == '__main__':
    prompt = MyPrompt()
    prompt.prompt = '> '
    prompt.cmdloop('Starting prompt...')

Я также создал другой сценарий, который откроет TCP-сервер и прослушивает удаленные клиенты в новом потоке. Клиенты могут отправлять на сервер команды конфигурации, а сервер будет их выполнять и отправлять любые выходные данные. Прямо сейчас клиент очень простой. Он может отправлять все что угодно и не имеет доступа к удобному интерфейсу, который предоставляет модуль cmd. Он также должен серверу проанализировать полученное сообщение и выяснить команду, которую клиент хочет выполнить (через длинный синтаксический анализатор if else).

Я пытаюсь объединить эти 2 сценария, но у меня много проблем, чтобы найти лучший способ сделать это. Я хочу разрешить кому-либо на сервере использовать cmd lscript локально, но я также хочу, чтобы сценарий cmd принимал удаленных клиентов и одновременно предоставлял им доступ к приглашению cmd. Кроме того, мне нужен способ, чтобы команды, введенные локально, и команды, отправленные удаленными клиентами, добавлялись в очередь для выполнения команд конфигурации по одной (каждая команда выполняется несколько минут и не может быть выполнена в параллельно).

Может ли кто-нибудь предоставить некоторые примеры или рекомендации о том, как я могу расширить свой сценарий cmd для поддержки удаленных подключений? Я понятия не имею, с чего начать, и буду очень признателен за любую помощь!

1 ответ

Вы, вероятно, лучше исследовать и изучать Ansible.

Хотя у меня нет опыта работы с ним, я очень рекомендую его, и он реализован и использует Python.

Документация кажется довольно хорошей.

(Я не использую его, потому что у меня не было необходимости делать подобные вещи - я обычно занимаюсь разработкой приложений)

Другие вопросы по тегам