CGI: пишем простой сайт на Python. Часть 1: Hello world
Проще всего создать динамические страницы на Python при помощи CGI-скриптов. CGI-скрипты — это исполняемые файлы, которые выполняются веб-сервером, когда в URL запрашивается соответствующий скрипт.
Сегодня я расскажу про то, как написать Hello world, как CGI-скрипт.
Настройка локального сервера
В Python уже есть встроенный CGI сервер, поэтому его настройка элементарна.
Для запуска из консоли (для любителей linux-систем). Запускать нужно из той папки, где мы хотим работать:
python3 -m http.server --cgi
Для сидящих на Windows чуть проще будет запуск Python файла (заметьте, что он должен находиться в той же папке, в которой мы планируем работать!):
Теперь откройте браузер и в адресной строке наберите localhost:8000
Если у вас примерно такая же картина, значит, у вас все заработало!
Hello world
Теперь в той папке, где мы запустили сервер, создаём папку cgi-bin (у меня она уже создана).
В этой папке создаём скрипт hello.py со следующим содержимым:
"Первая строка говорит о том, что это Python скрипт (CGI-скрипты можно не только на Python писать).
Вторая строка печатает заголовок. Он обозначает, что это будет html файл (бывает ещё css, javascript, pdf и куча других, и браузер различает их по заголовкам).
Третья строка (просто символ новой строки) отделяет заголовки от тела ответа.
Четвёртая печатает Hello world.
Теперь переходим на localhost:8000/cgi-bin/hello.py
Если у вас не работает, проверьте, установлены ли права на выполнение.
Также в консоли запущенного сервера появляются сообщения об ошибках. Например, убрал скобочку и обновил страницу:
В следующей части мы рассмотрим обработку данных форм и cookies.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Как запустить python скрипт на сайте через кнопку?
Нужна помощь. Нужна кнопка на сайте которая будет запускать python скрип, и как реализовать этот запуск(скрипт одно значение в txt файле, на другое). Много информации было просмотрено, но к ответу так и не пришел.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как запустить python скрипт без python
Как запустить python скрипт или какойто Gui(на pyqt5) в связке с какими то пайтоновскими скриптами.
Как запустить скрипт на сайте
Хочется сделать так, что имеется кнопка в приложение на python, при нажатие на которую происходит.
Как при нажатии на кнопку запустить скрипт?
Как при нажатии на кнопку в html запустить внешний скрипт? <div <a href.
Как запустить скрипт Python на хостинге
Здравствуйте! Заранее прошу прощения - с Python сталкиваюсь впервые. Ситуация такова: На хостинге.
Как запустить скрипт под Python на Денвере
Доброго времени суток! Есть скрипт под питон, и нужно его заставить работать на денвере. Скачал.
Автоматизируй это!
![]()
7054 / 4559 / 1207
Регистрация: 30.03.2015
Сообщений: 13,132
Записей в блоге: 29
если твой сайт не на каком то специфическом брайтоне, то по нажатию кнопки вызывай запрос к серверу где скрипт и выполнится.
Регистрация: 26.04.2023
Сообщений: 8
а как это реализовать в коде?
Автоматизируй это!
![]()
7054 / 4559 / 1207
Регистрация: 30.03.2015
Сообщений: 13,132
Записей в блоге: 29
tokyona, открыть документацию любого веб-фреймворка, из простых например fastAPI
Регистрация: 26.04.2023
Сообщений: 8
я наверное не правильно задал вопрос, но сайт на html.
Автоматизируй это!
![]()
7054 / 4559 / 1207
Регистрация: 30.03.2015
Сообщений: 13,132
Записей в блоге: 29
tokyona, а на чем еще он может быть? хтмл+цсс+жс - святая веб-троица
Добавлено через 24 секунды
если ты ждешь готовый код то вряд ли его напишут.
3500 / 2663 / 328
Регистрация: 11.03.2009
Сообщений: 6,097
Сообщение от tokyona 
но сайт на html.
Тут пожалуй надо уточнить, скрипт нужно запускать на стороне клиента или сервера?
Регистрация: 26.04.2023
Сообщений: 8
Сообщение от kazak 
на стороне клиента или сервера?
со стороны сервера
Регистрация: 26.04.2023
Сообщений: 8
Сообщение от Welemir1 
если ты ждешь готовый код то вряд ли его напишут.
Я не жду что бы мне его написали, я был бы не против узнать как это возможно сделать в теории.
Еще не где не находил что бы кому то нужно было запускать python скрипт на сайте
4751 / 2643 / 547
Регистрация: 07.11.2019
Сообщений: 4,359
Сообщение от tokyona 
Нужна кнопка на сайте которая будет запускать python скрип
Если понимать буквально, то как-то так:
https://amitness.com/2020/06/g. tory-tips/
Автоматизируй это!
![]()
7054 / 4559 / 1207
Регистрация: 30.03.2015
Сообщений: 13,132
Записей в блоге: 29
tokyona, а что в твоем понимании сайт? питон код ты можешь выполнить на сервере, в браузере выполняется джаваскрипт код, а не питон. Потому ты сам сначала определись что тебе нужно. Выполнять код на сервере -нет проблем, выше написал уже что делать для этого.
Регистрация: 26.04.2023
Сообщений: 8
решение было найдено
если кому вдруг пригодится, то это делается через php
1 2 3 4
form action="index-php.php"> p>b>Отправить/b>br> input type="submit" name="save" > /form>
$pylaunch = exec('python py/index.py');
Welemir1, Шерлок Холмс в одном из рассказов говорит Уотсону: "Если у человека такие усы и бакенбарды, то чтобы гарантированно получить от него нужную информацию, следует побиться с ним о заклад. " Перефразирую великих: если "нужно запустить скрипт через кнопку", и Вы решили помочь, то готовьтесь начинать "ab ovo".
| Меню пользователя @ Catstail |
| Посетить домашнюю страницу Catstail |
| Читать блог |
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604

Как запустить python-скрипт в консоли Windows?
Добрый день, господа. ..помогите пожалуйста разобраться Описание скрипта.
Как с использованием post запрос нажать на кнопку на сайте в python?
Мне надо нажать на кнопку на сайте. Я разобрался как это сделать с помощью selenium webdriver, но.

Как запустить скрипт (python), для постоянной работы на VPS сервере?
Есть скрипт на языке python. Есть vps сервер на digital ocean (чистая ubuntu, без установленных.
Как запустить Particle System через кнопку?
:)Немогу привязать запуск Particle System к кнопке. Кнопка есть и Particle System создан. Полгагаю.
Как не через selenium нажать кнопку на сайте
Всем доброго дня P.s. в вебе я чайник, в скором времени хотел всё это дело начать учить, но.
Как через cron запустить php-скрипт?
Здравствуйте, нужна помощь. Пытаюсь запустить выполнение cron'a: */2 * * * * /home/add2.php в.
Как запустить python скрипт на сайте, чтобы пользователь мог взаимодействовать с ним?
Мне нужна помощь, дело в том, что мне нужно сделать так, чтобы на сайте запускался py скрипт,желательно сделать это по кнопке. Нужно чтобы пользователь мог взаимодействовать с ним, то есть в py скрипте будут спрашиваться значения. И к python скрипту прилагается еще файл, ну пусть будет config.txt, нужно чтобы пользователь мог туда добавлять значения. Как это сделать? P.s на сайте используется wp(если это играет значение).
Отслеживать
user243545
задан 10 мая 2020 в 19:15
21 1 1 серебряный знак 3 3 бронзовых знака
А какой сайт даёт запускать у себя скрипты Python?
10 мая 2020 в 20:23
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
можно с помощью функции exec() с записью исходящих данных в массив. например:
exec("python3.5 /PATH/TO/FILE/SCRIPT.py ", $output_response_array); print_r($output_response_array);
где $input_params_string строка данных, разделенных пробелом, например:
$input_params_string = implode(' ', array( // В этом случае ключи не будут переданы 'user_id' => 1, 'user_pass' => 123, 'user_status' => 'OK', ));
и обработанная на стороне Python-скрипта, например:
import sys print(sys.argv[1]) #user_id print(sys.argv[2]) #user_pass print(sys.argv[3]) #user_status print ("Hello World!")
Вся информация, выведенная функцией print() в Python-скрипте, будет записана в массив $output_response_array PHP-скрипта
Отслеживать
ответ дан 10 мая 2020 в 23:25
70 1 1 серебряный знак 4 4 бронзовых знака
Возможно использовать CGI-скрипты на Python, если хостинг это поддерживает. На сколько я знаю, reg.ru и вроде как beget работают.
Если знаете веб-фреймворк, по типу Flask и Django, то можете запустить их на отдельном порту и настроить прокси через nginx/apache.
Отслеживать
ответ дан 10 мая 2020 в 20:24
89 1 1 серебряный знак 6 6 бронзовых знаков
import asyncio from aiohttp import web import aiohttp import os import pty import fcntl async def websocket_handler(request): ws = web.WebSocketResponse() await ws.prepare(request) loop = asyncio.get_running_loop() master, slave = pty.openpty() # создаем новую консоль name = os.ttyname(slave) pid = os.fork() # отделяемся в новый процесс if pid == 0: os.setsid() os.dup2(slave,0) # подключаем его к созданной ранее консоли os.dup2(slave,1) os.dup2(slave,2) os._exit(os.execv('/usr/bin/ipython3',('python@ws', ))) # запускаем там програмку # os._exit(os.execv('/usr/bin/python3',('python@ws', '/opt/project/script.py'))) # os._exit(os.execv('/usr/bin/su',('login@ws', '-', 'eri'))) stdin = os.fdopen(master, 'wb+', buffering=0) fl = fcntl.fcntl(master, fcntl.F_GETFL) fcntl.fcntl(master, fcntl.F_SETFL, fl | os.O_NONBLOCK) def pipe_data_received(ws): data = stdin.read() try: asyncio.ensure_future(ws.send_str(data.decode())) except: os.kill(pid,15) loop.add_reader(master, pipe_data_received, ws) # читаем консоль async for msg in ws: # читаем ввод пользователя if msg.type == aiohttp.WSMsgType.TEXT: stdin.write(msg.data.encode()) elif msg.type == aiohttp.WSMsgType.BINARY: stdin.write(msg.data) elif msg.type == aiohttp.WSMsgType.CLOSE: await ws.close() os.kill(pid,15) elif msg.type == aiohttp.WSMsgType.CLOSED: os.kill(pid,15) elif msg.type == aiohttp.WSMsgType.ERROR: os.kill(pid,15) os.kill(pid,15) os.waitpid(pid, 0) return ws app = web.Application() app.add_routes([web.get('/term', websocket_handler)]) web.run_app(app)
Запускается экземпляр питона, на вэб сокете соединяет с яваскриптом на сайте и можно в реальном времени поработать с консолью python или укажите параметры запуска вашего скрипта.
Хостинг - как работает Python
В хостинге некоторые решения могут показаться вам нестандартными.
Поэтому перед началом работы мы бы рекомендовали ознакомиться с вводной статьей.
1. Запуск Python
Python запускается через WSGI . Для работы сайта предоставляется 4 процесса (processes), на каждый процесс 2 потока (threads).
1.1 При создании сайта необходимо выбрать, что сайт работает на Python:

1.2 Загрузить файлы сайта можно подключившись по SFTP.
Файлы вашего приложения можно расположить в каталоге sitename/app , а статические файлы (.css, .jpg, .png и другие) - в каталоге sitename/static .
1.3 Далее нужно указать файл для запуска вашего приложения. Этот файл может называться wsgi.py (если вы используете Django), или любым другим образом ( main.py , projectname.py и т.д.).
Откройте настройки сайта в панели управления и в параметре APP_PATH укажите путь до файла для запуска, аналогично тому, как это сделано на скриншоте ниже:

1.4 В параметре APPLICATION укажите объект, с которого вебсервер начнет обрабатывать код вашего сайта. В Django он называется application . В Flask название такого объекта не стандартизировано. В каждом проекте он может называться по разному.
К примеру, в приложении
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
В строке app = Flask(__name__) создается экземпляр сервера Flask в переменной app . Именно она нам и нужна.
А значит в панели управления нужно будет указать APPLICATION=app .
Установка пакетов и отладка сайта
Управлять проектом можно подключившись по SSH.
После входа на сервер по SSH можно, например, установить необходимые для работы вашего сайта пакеты.
Для каждого сайта уже создано индивидуальное виртуальное окружение. Свое собственное виртуальное окружение создавать не требуется.
При установке пакетов через pip install сначала перейдите в каталог с сайтом и виртуальное окружение активируется автоматически:
c3087@h2:~$ c3087@h2:~$ cd mydomain-py.com/ (mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$
Далее можно установить нужные расширения:
(mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ pip install Flask
Для отладки можно запустить любой скрипт, выполнив его напрямую:
(mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ python app/somescript.py
По умолчанию в app/wsgi.py уже загружен файл, который при обращении через браузер выводит “Hello world!”.
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello world!\n"]
2. Смена версий Python
- откройте раздел “хостинг” в панели управления
- кликните на нужный контейнер
- кликните по нужному сайту
- перейдите на вкладку Python
Изменение версии Python сбрасывает виртуальное окружение. Установленные через pip install пакеты при смене версии удаляются.
3. Работа с MySQL
MySQL доступен только через сокет /run/mysqld/mysqld.sock и недоступен по сети. Но большинство приложений будут обращаться именно к сокету при подключении через localhost.
Рассмотрим блок подключения к MySQL в Django. Можно в качестве хоста использовать сокет:
'ENGINE': 'django.db.backends.mysql', 'HOST': '/var/run/mysqld/mysqld.sock', 'NAME': 'cxxx_pythonmysql_ru', 'USER': 'cxxx_pythonmysql_ru', 'PASSWORD': 'WoHtePamnevdjaf63',
'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', 'NAME': 'cxxx_pythonmysql_ru', 'USER': 'cxxx_pythonmysql_ru', 'PASSWORD': 'WoHtePamnevdjaf63',
Будут работать оба варианта.
Однако некоторые приложения при подключении через localhost обращаются только к сети по 127.0.0.1, а такой способ работать не будет. Поэтому рекомендуется подключение именно через сокет.
4. Работа с Redis
На хостинге в redis данные хранятся только в оперативной памяти и на диск не сохраняются. Из оперативной памяти данные очищаются при перезапуске сервиса, либо пока вы специально не удалите данные.
Перейдем в каталог с сайтом, чтобы устанавить пакет для определенного сайта
cd ~/mydomain-py.com
Установим драйвер для работы с redis
pip install redis
#!/usr/bin/env python import redis r = redis.StrictRedis(host='localhost', port=6379, db=0) r.set('ProtossAirUnits', 'Observer,Shuttle,Scout,Carrier,Carrier\'sInterceptor,Arbiter,Corsair') print(r.get('ProtossAirUnits'))
Сохраним этот код в файл app/sc1units2redis.py и разместим в каталоге с сайтом.
После подключения по SSH можно вручную запустить app/sc1units2redis.py .
Перейдем в каталог с сайтом, чтобы запускать app/sc1units2redis.py в окружении для определенного сайта
cd ~/mydomain-py.com
(mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ python app/sc1units2redis.py b"Observer,Shuttle,Scout,Carrier,Carrier'sInterceptor,Arbiter,Corsair"
В данном случае мы получили значение ключа ProtossAirUnits .
5. Работа с Memcached
Пример подключения к Memcached и сохранения данных на 15 секунд.
#!/usr/bin/env python import memcache client = memcache.Client([('127.0.0.1', 11211)]) sample_obj = client.set("sample_user", sample_obj, time=15) print("Stored to memcached, will auto-expire after 15 seconds") print(client.get("sample_user"))
Сохраним этот код в файл app/mem.py и разместим в каталоге с сайтом.
После подключения по SSH можно вручную запустить app/mem.py .
Перейдем в каталог с сайтом, чтобы запускать app/mem.py в окружении для определенного сайта
cd ~/mydomain-py.com
(mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ python app/mem.py Stored to memcached, will auto-expire after 15 seconds
В данном случае мы получили значение ключа sample_user .
6. Перезапуск сервиса после изменения кода сайта
Откройте настройки сайта в панели управления.

Нажмите кнопку “Перезапустить Python”.
Альтернативный вариант - подключитесь по SSH, и далее в папке с сайтом выполните команду
touch reload
c3087@h2:~/mydomain-py.com$ touch reload
7. Собственные настройки uwsgi
Создайте файл mydomain-py.com/etc/wsgi.ini ( mydomain-py.com следует изменить на имя вашего сайта).
В wsgi.ini укажите нужные вам настройками uwsgi. Стоит писать не весь конфиг целиком, а только дополнительные нужные вам опции.
После этого перезапустите uwsgi. Настройки загрузятся и применятся автоматически.
8. Работа с ошибками приложения
Если при обращении к сайту вы видите ошибку 502 Bad Gateway, то:
- откройте настройки сайта в панели управления
- кликните на нужный сайт
- перейдите на вкладку Python
Нас интересуют параметры APP_PATH и APPLICATION .
* Проверьте, что в APP_PATH путь до wsgi.py указан аналогично тому, как на скриншоте ниже:

В параметре APPLICATION укажите объект, с которого вебсервер начнет обрабатывать код вашего сайта. В Django он называется application . В Flask название такого объекта не стандартизировано. В каждом проекте он может называться по разному.
К примеру, в приложении
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
В строке @app.route("/") видно, что нужный нам объект будет называться app.
А значит в панели управления нужно будет указать APPLICATION=app .
После этого нажмите кнопку “Перезапустить Python” в верхней части страницы. Попробуйте открыть ваш сайт еще раз.
По-прежнему 502 Bad Gateway? Тогда стоит обратиться к логам ошибок.
Подключитесь к серверу по SFTP.
Посмотрите файл имя_сайта/log/имя_сайта-wsgi.log . Последние ошибки будут в конце файла.
