Python как запустить программу на удаленном компьютере
Перейти к содержимому

Python как запустить программу на удаленном компьютере

  • автор:

Удаленная отладка кода Python в Linux

Visual Studio позволяет локально и удаленно запускать приложения Python на компьютере Windows и выполнять их отладку (см. статью Удаленная отладка). С помощью библиотеки debugpy можно также выполнять удаленную отладку, используя другую операционную систему, другое устройство или реализацию Python, отличную от CPython.

При работе c debugpy для отлаживаемого кода Python создается сервер отладки, к которому может подключаться Visual Studio. Для такого размещения нужно внести лишь небольшое изменение в код для импорта и запуска сервера и в некоторых случаях скорректировать на удаленном компьютере настройки сети и брандмауэра, чтобы разрешить подключения TCP.

Для Visual Studio 2019 версии 16.4 и более ранних версий использовалась библиотека ptvsd. В Visual Studio 2019 версии 16.5 библиотека ptvsd 4 заменена библиотекой debugpy.

Настройка компьютера Linux

Для выполнения данного пошагового руководства необходимо следующее:

  • удаленный компьютер с Python на базе операционной системы, такой как Mac OSX или Linux;
  • открытый порт 5678 (входящий трафик) в брандмауэре этого компьютера, который используется по умолчанию для удаленной отладки.

Это пошаговое руководство основано на Visual Studio 2019 версии 16.6.

Можно без труда создать виртуальную машину Linux в Azure и получить к ней доступ с помощью удаленного рабочего стола из Windows. Для виртуальной машины удобно использовать Ubuntu, так как Python устанавливается по умолчанию. В противном случае см. список в разделе Выбор и установка интерпретатора Python с перечнем дополнительных расположений скачиваемых файлов Python.

Дополнительные сведения о создании правила брандмауэра для виртуальной машины Azure см. в статье Открытие портов для виртуальной машины в Azure с помощью портала Azure.

Подготовка скрипта к отладке

  1. Создайте на удаленном компьютере файл Python guessing-game.py со следующим кодом:
import random guesses_made = 0 name = input('Hello! What is your name?\n') number = random.randint(1, 20) print('Well, , I am thinking of a number between 1 and 20.'.format(name)) while guesses_made < 6: guess = int(input('Take a guess: ')) guesses_made += 1 if guess < number: print('Your guess is too low.') if guess >number: print('Your guess is too high.') if guess == number: break if guess == number: print('Good job, ! You guessed my number in guesses!'.format(name, guesses_made)) else: print('Nope. The number I was thinking of was '.format(number)) 

Примечание. Рекомендуется записать устанавливаемую версию debugpy на случай необходимости устранения неполадок. Доступные версии также можно найти в списке debugpy.

import debugpy debugpy.listen(('0.0.0.0', 5678)) 

Помимо listen и wait_for_client , debugpy предоставляет вспомогательную функцию breakpoint , которая обрабатывается как программная точка останова, если присоединен отладчик. Существует также функция is_client_connected , которая возвращает значение True , если присоединен отладчик (но вы не обязаны проверять этот результат, прежде чем вызывать любые другие функции debugpy ).

Удаленное подключение с помощью инструментов Python

В следующем примере мы устанавливаем простую точку останова, чтобы прервать выполнение удаленного процесса.

  1. Скопируйте удаленный файл на локальный компьютер и откройте его в Visual Studio. Вы можете разместить этот файл в любом каталоге, но его имя должно совпадать с именем скрипта на удаленном компьютере.
  2. Чтобы технология IntelliSense для debugpy работала на локальном компьютере, установите пакет debugpy в среде Python (необязательно).
  3. Выберите Отладка>Присоединение к процессу.
  4. В открывшемся диалоговом окне Присоединение к процессу задайте для параметра Тип подключения значение Python remote (debugpy) (Удаленная отладка Python (debugpy)).
  5. В поле Цель подключения введите tcp://:5678 , где — IP-адрес удаленного компьютера (может быть явным адресом или именем, например myvm.cloudapp.net), а :5678 — номер порта удаленной отладки.
  6. Нажмите клавишу ВВОД, чтобы заполнить список доступных процессов debugpy на этом компьютере: Entering the connection target and listing processesЕсли после заполнения этого списка вы запускаете другую программу на удаленном компьютере, нажмите кнопку Обновить.
  7. Выберите процесс для отладки, а затем нажмите Присоединить, либо дважды щелкните процесс.
  8. Visual Studio переключается в режим отладки, а скрипт продолжает выполняться на удаленном компьютере, предоставляя все обычные возможности отладки. Например, установите точку останова в строке if guess < number: , затем переключитесь на удаленный компьютер и введите другую догадку. После этого Visual Studio на локальном компьютере останавливается в этой точке останова, показывает локальные переменные и т. д. Visual Studio pauses debugging when breakpoint is hit
  9. При остановке отладки Visual Studio отключается от программы, которая продолжает выполняться на удаленном компьютере. Библиотека debugpy также продолжает прослушивать присоединение отладчиков, поэтому можно повторно присоединиться к процессу в любое время.

Устранение неполадок при подключении

  1. Убедитесь, что для параметра Тип подключения выбрано значение Python remote (debugpy) (Удаленная отладка Python (debugpy)).
  2. Убедитесь, что секрет в поле Цель подключения точно соответствует секрету в удаленном коде.
  3. Убедитесь, что IP-адрес в поле Цель подключения точно совпадает с IP-адресом удаленного компьютера.
  4. Убедитесь, что на удаленном компьютере открыт порт удаленной отладки, а в целевой объект соединения включен суффикс порта, такой как :5678 .
    • Чтобы использовать другой порт, укажите его в listen , как в debugpy.listen((host, port)) . В этом случае откройте соответствующий порт в брандмауэре.
  5. Убедитесь, что установленная версия debugpy на удаленном компьютере, возвращенная pip3 list , соответствует используемой версии инструментов Python в Visual Studio в таблице ниже. При необходимости обновите debugpy на удаленном компьютере.
Версия Visual Studio Версия инструментов Python или debugpy
2019 16.6 1.0.0b5
2019 16.5 1.0.0b1

В Visual Studio 2019 версий 16.0–16.4 использовалась ptvsd, а не debugpy. Процесс в этом пошаговом руководстве для этих версий аналогичен, но имена функций отличаются. В Visual Studio 2019 версии 16.5 используется debugpy, но имена функций совпадают с именами в ptvsd. Вместо listen используется enable_attach . Вместо wait_for_client используется wait_for_attach . Вместо breakpoint используется break_into_debugger .

Использование ptvsd версии 3.x для отладки в прежних версиях

Visual Studio 2017 версии 15.8 и более поздних версий использует отладчик на основе ptvsd версии 4.1 и более поздних. Visual Studio 2019 версии 16.5 и последующих версий использует отладчик на основе debugpy. Эти версии отладчика совместимы с Python 2.7, а также Python 3.5 и последующих версий. Если вы используете Python 2.6 и 3.1–3.4 или IronPython, Visual Studio отображает ошибку Debugger does not support this Python environment (Отладчик не поддерживает эту среду Python). Следующие сведения относятся только к удаленной отладке с помощью ptvsd версии 3.x.

  1. При использовании ptvsd 3.x функции enable_attach требуется передавать «секрет» в качестве первого аргумента, который ограничивает доступ к выполняющемуся скрипту. Этот секрет нужно ввести при присоединении удаленного отладчика. Хотя это не рекомендуется, можно разрешить подключаться любым пользователям с помощью enable_attach(secret=None) .
  2. Целевой URL-адрес подключения — tcp://@:5678 , где — это функция enable_attach , передаваемая в виде строки в коде Python.

По умолчанию подключение к серверу удаленной отладки ptvsd 3.x защищено только с помощью секрета, а все данные передаются в виде обычного текста. Для более безопасного соединения ptvsd 3.x поддерживает SSL с использованием протокола tcsp , который настраивается следующим образом.

    На удаленном компьютере создайте отдельный самозаверяющий сертификат и файлы ключа, используя openssl:

openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key 
ptvsd.enable_attach(secret='my_secret', certfile='cert.cer', keyfile='cert.key') 

То же изменение можно внести в файл кода на локальном компьютере, но так как этот код не выполнялся, делать это необязательно.

  • Перезапустите программу Python на удаленном компьютере, подготовив ее к отладке.
  • Обеспечьте безопасность канала, добавив сертификат в доверенный корневой ЦС на компьютере с ОС Windows, где установлена Visual Studio:
    1. Скопируйте файл сертификата с удаленного компьютера на локальный.
    2. Откройте панель управления и перейдите к компоненту Администрирование>Управление сертификатами компьютера.
    3. В открывшемся окне в левой части разверните узел Доверенные корневые центры сертификации, правой кнопкой мыши щелкните Сертификаты и выберите пункты Все задачи>Импорт.
    4. Найдите и выберите файл CER, скопированный с удаленного компьютера, а затем выполните действия, описанные в диалоговых окнах, чтобы завершить импорт.
  • Повторите процесс присоединения в Visual Studio, как было описано ранее, используя tcps:// в качестве протокола для параметра Цель подключения (или Квалификатор). Choosing the remote debugging transport with SSL
  • Visual Studio выведет предупреждение о возможных проблемах с сертификатами при подключении по протоколу SSL. Можно игнорировать эти предупреждения и продолжить работу. Но несмотря на то, что канал по-прежнему шифруется от перехвата, он может быть уязвим для атак «злоумышленник в середине».
    1. Если отображается предупреждение о том, что удаленный сертификат не является доверенным, это означает, что для доверенного корневого ЦС не был правильно добавлен сертификат. Проверьте эти действия и повторите попытку. SSL certificate trusted warning
    2. Если выводится предупреждение о том, что имя удаленного сертификата не соответствует имени узла, это означает, что при создании сертификата использовалось неправильное имя узла или IP-адрес в качестве общего имени. SSL certificate hostname warning
  • Как запустить программу на удаленном ПК?

    Добрый вечер, Тостер.
    Каким образом я могу запустить программу (интересует powershell) на удаленном пк? Есть логин и пароль, а так же ip адрес компьютера.
    Все это хочу реализовать на Python.
    Подключение сделал через wmi:

    from socket import * from multiprocessing import Process, Queue import optparse import os import wmi parser = optparse.OptionParser() parser.add_option('-e', '--engine_list', action="store", dest="engine_list", help="string", default="example") options, args = parser.parse_args() list = [] list = options.engine_list.split(',') def connect(server,queue): ip = server username = "" password = "" try: print "Establishing connection to %s" %ip connection = wmi.WMI(ip, user=username, password=password) print "Connection established" except wmi.x_wmi: print "Your Username and Password of "+getfqdn(ip)+" are wrong." if __name__ == '__main__': queue1 = Queue() for server in list: p1 = Process(target=connect, args=(server,queue1)) p1.start()

    Как теперь я могу запустить что-то на удаленном пк?

    • Вопрос задан более трёх лет назад
    • 1623 просмотра

    Комментировать

    Решения вопроса 0

    Ответы на вопрос 2

    STLEON

    In Console We Trust. Code hard. Or die.

    Запуск программы на удаленном компьютере

    Мне нужно запустить .bat файл из питона(по определенному условию) на компьютере(вин10) к которому я имею доступ по сети. Те работает питоновский скрипт на сервере , он дожен запустить файл удаленно. Я так понимаю нужен запущенный скрипт на принимающем компьюторе. Какими средствами это делается?

    Отслеживать
    задан 14 фев 2021 в 14:49
    medium2000 medium2000
    57 4 4 бронзовых знака

    github.com/jborean93/pypsexec#examples так же можете посмотреть в сторону paramiko (вин10 может в ssh)

    14 фев 2021 в 14:54

    0

    Сортировка: Сброс на вариант по умолчанию

    Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

      Важное на Мете
    Похожие

    Подписаться на ленту

    Лента вопроса

    Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

    Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.2.12.4680

    5 способов запустить Python скрипт не на локальной машине (для новичка)

    Привет. Я не являюсь разработчиком и когда набросал простой скрипт для личных целей, задался вопросом: «Как запустить код не на своем компьютере?». Самые частые ответы в поисковике были про сервер и Docker. В результате забил гвоздь микроскопом. Почитать можно здесь.

    Для специалистов с опытом статья наверное не имеет ценности, но новичкам надеюсь поможет сориентироваться и не потратить много часов на поиск информации и не совершать моих ошибок.

    Варианты

    Все ниже перечисленные способы подходят для несложного скрипта. Например, мой код для сборки статистики с группы VK, каждый час выполняет работу и завершается. Подробности тут.

    Именно о запуске не сложных программ пойдет речь. Решения:

    • Yandex Functions и пр.
    Облачные решения

    Простой скрипт и простое решение. Все необходимое есть и не нужно возиться с сервером.

    Yandex Functions

    Достаточно зарегистрироваться. Перейти в консоль, потратить время на документацию, перенести свой код и настроить таймеры. В функционал уже встроены логирование и мониторинг.

    Что по деньгам? Бесплатно можно выполнять 1 000 000 раз в месяц. Что думаю более чем достаточно для небольших задач.

    Пример работы с Yandex Functions

    Существуют аналогичные заморские решения Amazon Lambda, Google Cloud Functions, Azure Functions. С учетом действующих ограничений не вижу смысла дополнительно тратить время на преодоления всех препятствий, когда результат принципиально не будет отличаться. Если есть желание разобраться оставлю ссылки на пример работы:

    VPS сервер

    Аренда сервера мне кажется избыточным решением для запуска одного простого скрипта. Это оправдано в случае если есть желание разобраться как взаимодействовать с сервером или в будущем будите разрабатывать более сложные проекты.

    Для настройки связи вашего сервера с локальной машиной, вам нужно будет настроить SSH. Если вы часто планируете вносить изменения в код для переноса файлов рекомендую настроить Github это решение удобное и практичное.

    • SSH с 1:05:23 до 1:08:25
    • Github с 1:10:17 до 1:14:32

    В качестве альтернативы Github можно установить себе FileZilla Client. GUI позволяет удобно перетаскивать необходимые файлы и папки. Так же можно копировать файлы используя только командную строку.

    Python

    Простой способ применить бесконечный цикл с задержкой времени непосредственно в скрипте. Пример на имитации часов.

    import time while True: localtime = time.localtime() result = time.strftime("%I:%M:%S %p", localtime) print(result) time.sleep(1)

    Второй способ сделать то же самое используя библиотеку schedule. Эта библиотека дает возможность более гибко настроить время исполнения кода. Например, ваш скрипт должен запускаться каждую субботу в 6 часов.

    import schedule import time def job(): localtime = time.localtime() result = time.strftime("%I:%M:%S %p", localtime) print(result) schedule.every().sunday.at("06:00").do(job) while True: schedule.run_pending()

    У зацикливания есть ощутимый минус если программа упадет, то самостоятельно в следующей период она не запуститься.

    Crontab

    Немного сложнее, чем цикл в самом коде. Вам придётся поработать с командой строкой и в самом файле сrontab прописать, когда и какой файл запускать. Если у вас произойдет ошибка, не связанная с вашим кодом, например, упадет внешний API сервиса к которому вы обращаетесь, то в следующий период запуска, когда API будет восстановлен ваш скрипт отработает. Минусом является очень слабое логирование, поэтому понять в каком конкретно месте падает скрипт достаточно сложно.

    Systemd

    Более трудозатратный способ по сравнению с crontab. Вам придётся потратить время на создание 2-х файлов. Плюсы гибкая настройка времени, условий выполнения и широкое логирование. Вы сможете увидеть ошибку с который упал код.

    Docker

    Избыточное решение для запуска простого скрипта, тем не менее им тоже можно воспользоваться. В первую очередь вы потратите много времени на установку docker и его настройку. Если у вас простой код, то решение с docker скорее всего не принесет дополнительной ценности кроме опыта работы.

    Вывод

    Надеюсь статья поможет новичкам и сэкономит их время. Оставляйте комментарии, если считаете, что существуют еще инструменты для запуска простых скриптов. Буду стараться дополнять статью опираясь на вашу обратную связь.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *