Mit diesem web.py -basierten einfachen Modul können Sie automatisch einen einfachen HTTP -Webserver aus erweiterten argparse.ArgumentParser -Objekten und ähnlichen ( argh.ArgumentParser ) einrichten. Mithilfe dieser Informationen können Sie die Webbenutzeroberfläche automatisch aus einfachen Funktionen generieren, die in Ihrer Anwendung definiert sind. Dieses Paket wurde gemacht, um Ihre persönlichen Befehlszeilenskripte in die nächste Stufe zu bringen - interne gemeinsam genutzte Dienstprogramme.
Für eine Produktion wie Setup benötigen Sie:
Machen Sie Ihr Hauptskript ein globales Anwendungsobjekt, indem Sie die Methode webui.webui.wsgi () aufrufen
Ändern Sie index.wsgi in Ihre Anwendung (triviale Konfiguration, importierte Anwendung).
Richten Sie einen WSGI ein, der Apache (oder einen anderen) Server unterstützt
Für das Debuggen wie ein Setup benötigen Sie (aber da es für interne Tools verwendet wird, kann dies auch in Ordnung sein):
argparse.ArgumentParser.parse_args() oder argh.dispatch() durch webui.Webui.getone() bzw. webui.Webui.dispatch() . dispatch() wird ein Webdienst instanziieren und Versandmethoden aufrufen (entweder vom Benutzer - Sie - oder Versandmethoden zur Unterstützung von Argumentparsern wie argh )
get() und getone() wickeln Sie die methodische methode dispatch() und ergeben Sie Ergebnisse, wie sie im Webformular eingereicht werden. Stellen Sie eine Schnittstelle bereit, die der Methode parse_args() ähnelt.
argparseweb verlangt, dass web.py verfügbar sein muss. Sie können es installieren (nach der neuesten Version prüfen) mit: pip install web.py
In diesem Beispiel wird ein HTTP -Server eingerichtet, einen gültigen Eingang abgerufen, den HTTP -Server nach unten gerissen, eine einladende Nachricht an stdout und beenden: drucken Sie eine einladende Nachricht aus:
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 ()In diesem Beispiel wird auch bis zum Stoppen ausgeführt und eine einladende Nachricht für jede gültige Eingabe gedruckt:
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 ()In diesem Beispiel werden die einladende Nachricht in der HTTP -Antwort gedruckt und sie an den Benutzer zurücksendet:
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 ()Dieser Snippet enthält drei Betriebsmodi für das Webui -Dienstprogramm:
Erstens und einfachste: Versandmethoden, die die automatische Funktion von Argh mit den Befehlszeilen -Parser -Funktionen verwenden, ist dies völlig nichts mit Webui zu tun. Auf diese Weise verlieren Sie nicht vorhandene Fähigkeit zur Nutzung der Befehlszeilen.
Erhalten --webui als erstes Befehlszeilenargument, setzt einen Entwicklungs -Webserver (Standardeinstellungen zu *: 8080) und ist bereit zu verwenden.
Aussetzen eines globalen application , das die WSGI -Schnittstelle unterstützt. Sobald Sie einen Browser mit der korrekten WSGI -Konfiguration zeigten (für mich zum ersten Mal ein bisschen Schmerz), funktioniert es wie Magie :)
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 Weitere Beispiele finden Sie bei test.py
Erledigt: