Как интерактивно запустить сценарий python или bash на веб-странице? - PullRequest
0 голосов
/ 10 июля 2020

Я создаю веб-сайт и хотел бы показать на своей веб-странице терминал, который запускает скрипт (python или bash) в интерактивном режиме.

Что-то вроде trinket.io, но я бы хотел используйте интерпретатор python или bash, который у меня есть на моем сервере, чтобы я мог устанавливать пакеты pip и в целом контролировать каждый аспект скрипта.

Я думал о чем-то вроде интерактивного кадра, который показывает терминал и то, что в нем выполняется, obv с поддержкой взаимодействия с пользователем.

Хороший пример: https://create.withcode.uk/, это именно то, что я хочу, но я хотел бы разместить его на своем собственном сервере с моими собственными модулями и экосистемой. Кажется, это тоже неплохо с точки зрения безопасности.

Есть что-нибудь подобное?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Если я хорошо понимаю, вы ищете механизм, который позволяет отображать терминал на веб-сервере.

Затем вы хотите запустить интерактивный сценарий python на этом терминале, верно.

Итак, в конце концов, решение для совместного использования терминала не обязательно должно быть написано в python, верно? (Хотя я должен признать, что предпочитаю python решения, если найду их, но иногда быть прагматичным c неплохая идея)

Вы можете найти в Google http и эмуляторы терминала.

Возможно, ttyd отвечает всем требованиям. https://github.com/tsl0922/ttyd

Создание на linux может быть выполнено с помощью

sudo apt-get install build-essential cmake git libjson-c-dev libwebsockets-dev
git clone https://github.com/tsl0922/ttyd.git
cd ttyd && mkdir build && cd build
cmake ..
make && make install

Использование будет примерно таким: ttyd -p 8888 yourpythonscript.py

, а затем вы можете подключиться к веб-браузеру с помощью http://hostip:8888

вы, конечно, можете «спрятать» этот URL-адрес за обратным прокси-сервером и добавить к нему аутентификацию или добавить параметры, такие как --credential username:password, для защиты паролем url.

Дополнение: Если вы хотите поделиться несколькими сценариями с разными людьми, и обмен осуществляется на лету, то вы можете посмотреть tty-share (https://github.com/elisescu/tty-share) и tty-сервер (https://github.com/elisescu/tty-server)

tty-сервер может быть запущен в контейнере docker. tty-share можно использовать для запуска сценария на вашем компьютере на одном из ваших терминалов. Он выведет URL-адрес, который вы можете дать человеку, с которым хотите поделиться определенным сеансом c) Если вы думаете, что это интересно, я мог бы подробнее остановиться на этом

0 голосов
/ 10 июля 2020

>> Вставьте сюда заявление об отказе от ответственности << </em>

Самый простой способ сделать это c - создать элемент div, в котором вы будете хранить свой вывод и input элемент для ввода команд. Затем вы можете ajax POST команду внутреннему контроллеру.

Контроллер примет команду и запустит ее, одновременно захватывая выходные данные команды и отправляя их обратно на веб-страницу для этого. для рендеринга в div

В python Я использую это для захвата вывода команды:

from subprocess import Popen, STDOUT, PIPE

proc = Popen(['ls', '-l'], stdout=PIPE, stderr=STDOUT, cwd='/working/directory')
proc.wait()
return proc.stdout.read()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...