Этот простой модуль на основе Web.py позволяет автоматически настраивать простой веб -сервер HTTP из Advanced argparse.ArgumentParser объектов и аналогичных ( argh.ArgumentParser ). Использование этого поверх ARGH позволяет автоматически генерировать интерфейс веб -пользователя из простых функций, определенных в вашем приложении. Этот пакет был создан для того, чтобы получить ваши личные сценарии командной строки на следующий этап - внутренние общие утилиты.
Для такого производства, как настройка, вам понадобится:
Сделайте ваш основной сценарий раскрыть глобальный объект приложения, вызывая метод webui.webui.wsgi ()
Изменить index.wsgi в соответствии с вашим приложением (тривиальная конфигурация, импорт вышеупомянутое приложение)
Настройка WSGI поддерживает Apache (или любой другой) сервер
Для отладки, такой как настройка, которая вам понадобится (но, поскольку она используется для внутренних инструментов, это также может быть хорошо):
argparse.ArgumentParser.parse_args() или argh.dispatch() с webui.Webui.getone() или webui.Webui.dispatch() соответственно. dispatch() создаст экземпляры веб -службы и методы отправки вызова (либо предоставленные пользователем - или методы отправки поддерживающих аргументов, таких как argh )
get() и getone() оберните метод dispatch() и вытекает результаты, как они представлены в веб -форме, предоставляя интерфейс, который напоминает метод parse_args() .
argparseweb требует, чтобы web.py был доступен. Вы можете установить его (проверьте последнюю версию) с: pip install web.py
В этом примере будет настроен HTTP -сервер, получить один действительный ввод, разорвать сервер HTTP, распечатать приветственное сообщение в Stdout и Exit:
import argparse
from argparseweb import *
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
opts = webui . Webui ( parser ). getone ()
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
if __name__ == "__main__" :
main ()Этот пример также будет работать до остановки, печатая приветственное сообщение для каждого допустимого ввода:
import argparse
from argparseweb import *
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
for opts in webui . Webui ( parser ). get ():
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
if __name__ == "__main__" :
main ()Этот пример будет распечатать приветственное сообщение в ответе HTTP, отправив его обратно пользователю:
import argparse
from argparseweb import *
def welcome ( opts ):
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
webui . Webui ( parser ). dispatch ( welcome , parsed = True )
if __name__ == "__main__" :
main ()Этот фрагмент включает в себя три режима работы для утилиты WebUI:
Первое и проще: методы отправки с использованием автоматической функции ARGH на объекты анализатора командной строки, это совершенно не связано с WebUI, и таким образом вы не потеряете существующую способность использования командной строки.
Получение --webui в качестве первого аргумента командной строки, устанавливает веб -сервер разработки (по умолчанию *: 8080) и готов к использованию.
разоблачение глобального объекта application , который поддерживает интерфейс WSGI. Как только вы укажите браузер с правильной конфигурацией WSGI (в первый раз это стало для меня болью), он будет работать как волшебство :)
myapp.py:
import argparse
from argparseweb import *
def get_parser ():
"""Generate generic argument parser"""
cmd_parser = argh . ArghParser ()
cmd_parser . add_commands ([...])
return cmd_parser
def main_1 ():
# k. get the parser as usual
cmd_parser = get_parser ()
# last chance to use webui, if --webui is passed as first command line argument
# remove it as let webui handle the rest
if sys . argv [ 1 ] == '--webui' :
sys . argv . remove ( '--webui' )
webui . Webui ( cmd_parser ). dispatch () # second mode of operation - development/fast setup
else :
# dispatch either webui or argh
cmd_parser . dispatch () # first mode of operation - regular command line
def main_2 ():
parser = argparse . ArgumentParser ()
# TODO: fill argparse
# opts = parser.parse_args()
opts = webui . Webui ( parser ). getone ()
# TODO: use opts as you would with any ArgumentParser generated namespace,
# opts is really a namespace object directly created by parser, and webui only compiled an argument sequence
# based on the filled form, passed into parser.parse_args() and back to you
def wsgi ():
global application
# create a webui application using the command line argument parser object
# and make it's wsgi function the global `application` parameter as required by wsgi
cmd_parser = get_parser ()
application = webui . Webui ( cmd_parser ). wsgi () # third mode of operation - production wsgi application
if __name__ == "__main__" :
# script initialized as main, lets do our trick
main ()
else :
# if script wasn't initialized as main script, we're probably running
# in wsgi mode
wsgi ()index.wsgi:
# TODO: replace with your application path
# i found now way to get it automatically in wsgi :/
APP_DIR = '/var/www/myapp'
import sys , os
sys . path . insert ( 0 , APP_DIR )
os . chdir ( APP_DIR )
from myapp import application Больше примеров на test.py
Сделанный: