1

Тема: виконання Python скрипта

Не знаю чи в правильну тему написав.
Отже, є простенька програмка на Python, наприклад яка на вході отримує string а на виході видає його довжину.
Як організувати процес, щоб юзер в браузері в формі вводив string, далі натискав кнопочку, яка би запускала цей код на сервері з введеним string як input і показувала в браузері його отриману довжину?

2 Востаннє редагувалося /KIT\ (05.07.2021 12:46:09)

Re: виконання Python скрипта

`

3

Re: виконання Python скрипта

/KIT\ написав:

заміняєте input на прийом метода форми (POST або GET)

а як це в html описати?

4 Востаннє редагувалося /KIT\ (05.07.2021 12:46:12)

Re: виконання Python скрипта

`

5

Re: виконання Python скрипта

post та get? а може краще ajax!?

6

Re: виконання Python скрипта

людині не пояснюєте до кінця все. Це ж не php. В python треба взяти купу інструментів.

Загалом:
1. почитайте, що таке HTTP;
2. почитайте, що таке HTML форма.
3. візьміть python flask. Там в десять лінійок в одному файлі можна вже написати код, що буде приймати запити. Тобто нічого складного не повинно виникнути.
4. (optional), якщо потрібно викласти в нет, то шукайте щось на подобі pythonanywhere - безкоштовно

7

Re: виконання Python скрипта

якщо стоїть завдання написати таку програмку без фреймворків, то я б рекомендував застосувати make_server

приклад коду :

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import html

from urllib.parse import parse_qs
from wsgiref.simple_server import make_server


def router(environ, start_response):
    try:
        request_body_size = int(environ.get('CONTENT_LENGTH', 0))
    except (ValueError):
        request_body_size = 0
    data = parse_qs(environ['wsgi.input'].read(request_body_size).decode('utf-8'))
    data = {d: list(map(html.escape, data[d])) for d in data}
    path = environ['PATH_INFO']

    if path == '/':
        response = index(data=None)
    elif path == '/secret_page':
        response = secret_page(data=environ)
    elif path == '/login':
        response = login(data=None)
    ....

    start_response("200 OK", [("Content-type", "text/html")])
    return response


host = 'localhost'
port = 5050
server = make_server(host, port, router)
print('Start server at : ', host, ':', port)
try:
    server.serve_forever()
finally:
    pass

повністю глянути працюючий код https://github.com/Viach/user-admin

це якраз було завдання - зробити феб-форму без застосування вебфреймворків.

Подякували: P.Y.1

8

Re: виконання Python скрипта

FakiNyan написав:

post та get? а може краще ajax!?

пробачте, а ajax якими методами здійснюється?

Подякували: leofun011

9

Re: виконання Python скрипта

/KIT\ написав:
<form action='вашапрограмма.py' method='GET'>
<input name='string'>
<input type='submit'>
</form>

Зробив так, воно просто виводить на сторінку код скрипту

import sys
nb = sys.argv
print ('length is',len(nb[1]),'characters')

10

Re: виконання Python скрипта

dialectstat написав:
/KIT\ написав:
<form action='вашапрограмма.py' method='GET'>
<input name='string'>
<input type='submit'>
</form>

Зробив так, воно просто виводить на сторінку код скрипту

import sys
nb = sys.argv
print ('length is',len(nb[1]),'characters')

а де браузер?

11

Re: виконання Python скрипта

ping, що маєте на увазі? В браузер виводить сам код, а не виконує його.

12

Re: виконання Python скрипта

dialectstat написав:

ping, що маєте на увазі? В браузер виводить сам код, а не виконує його.

Код чи результат виконання коду?

13

Re: виконання Python скрипта

ping написав:
dialectstat написав:

ping, що маєте на увазі? В браузер виводить сам код, а не виконує його.

Код чи результат виконання коду?

Текст коду

14

Re: виконання Python скрипта

dialectstat написав:
ping написав:
dialectstat написав:

ping, що маєте на увазі? В браузер виводить сам код, а не виконує його.

Код чи результат виконання коду?

Текст коду

щоб юзер в браузері в формі вводив string, далі натискав кнопочку, яка би запускала цей код на сервері з введеним string як input і показувала в браузері його отриману довжину?

вивід тексту коду не відповідає початковій поставленій умові.

15

Re: виконання Python скрипта

Та звичайно, що не відповідає, тому я питаюся, де помилка?

16 Востаннє редагувалося ping (25.08.2017 10:39:58)

Re: виконання Python скрипта

dialectstat написав:

Та звичайно, що не відповідає, тому я питаюся, де помилка?

тому я і питаю - де тут задіяний браузер?

тобто - де програма, яка слухає 80-й (наприклад) порт, приймає http запит від браузера (чи іншого агента) , опрацьовує його, повертає response ?

p.s.
Веб-се́рвер (англ. Web Server) — це сервер, що приймає HTTP-запити від клієнтів, зазвичай веб-браузерів, видає їм HTTP-відповіді, зазвичай разом з HTML-сторінкою, зображенням, файлом, медіа-потоком або іншими даними.
https://uk.wikipedia.org/wiki/%D0%92%D0 … 0%B5%D1%80

17 Востаннє редагувалося P.Y. (26.08.2017 16:37:54)

Re: виконання Python скрипта

Існує безліч способів реалізувати подібну задачу, використовуючи різні технології (CGI, WSGI, веб-сервер на сокетах, або ще можна якийсь фреймворк задіяти…). Якщо програма робиться на CGI (технологія в наш час застаріла, але проста в реалізації), а в якості сервера використовується Apache, то свою пітонівську програму слід розмістити в каталозі cgi-bin. Якщо це wsgi і той же апач, слід подбати, щоб у сервера був відповідний плагін для роботи з wsgi. Або ж пітонівська програма може сама по собі функціонувати як веб-сервер (тоді Апач непотрібен, чи, як варіант, він може з'єднуватися з вашою програмою як проксі). Усе це різні технології, код для них пишеться по-різному (хоча є модулі, що забезпечують роботу wsgi через інші механізми — CGI, вбудований веб-сервер). Якщо використовуються веб-фреймворки, такі як Flask чи Django, вони являють собою надбудову над тим же WSGI чи іншими низькорівневими компонентами.

Судячи з того, що у Вас «виводиться код», Ви просто розмістили свою пітонівську програму на веб-сервері, поряд з html-файлами? Це так не працює, Python — не php, з ним треба більше мороки (див. попередній абзац). Код скрипту також вимагає переробки (інший механізм передачі аргументів — залежить від конкретного варіанту реалізації; якщо хочете зробити з цієї штуки CGI (що, в даному випадку, робиться відносно просто), то також слід попередньо вивести http-хедери, інакше сервер вам скаже про internal server error). Загалом варіант для CGI виглядатиме так:

#!py -3

import os
from urllib.parse import parse_qs
print ("Content-type: text/html\n\n")# (виводимо http-хедер, що закінчується порожнім рядком)

# далі йде безпосередньо вивід програми:
try:
    qs=os.environ['QUERY_STRING']
    nb=parse_qs(qs)['nb'][0]
    print ('length of ', nb, ' is',len(nb),'characters')
except:
    # якщо параметр передано не було, слід вивести форму вводу:
    print('''
    <form method='GET'>
    <input name='nb'>
    <input type='submit'>
    </form>''')
Подякували: LoganRoss, ping, dialectstat, leofun014

18 Востаннє редагувалося dialectstat (04.09.2017 10:07:35)

Re: виконання Python скрипта

P.Y., дякую за роз’яснення. Почав розбиратися, чіткіше зрозумів що мені потрібно.
Хотів би зробити API, тобто щоб сторонній користувач міг причепити цю функцію на свій сайт, або запускати зі свого скрипту. Звичайно, при наданих кредентіалах.
Які курси на Курсера, статті порекомендуєте по цьому?

Подякували: Monolith1