此基于Web.py的简单模块允许您从高级argparse.ArgumentParser对象和类似( argh.ArgumentParser )中自动设置简单的HTTP Web服务器。在ARGH顶部使用此功能,您可以自动从应用程序中定义的简单功能生成Web用户界面。此软件包是为了将您的个人命令行脚本进入下一阶段 - 内部共享实用程序。
对于像设置这样的制作,您需要:
通过调用webui.webui.wsgi()方法使您的主要脚本公开应用程序全局对象
修改index.wsgi适合您的应用程序(琐碎的配置,导入上述应用程序)
设置支持Apache(或任何其他)服务器的WSGI
对于像设置这样的调试,您需要(但由于它用于内部工具,这也可能很好):
argparse.ArgumentParser.parse_args()或argh.dispatch()的方法,分别为webui.Webui.getone()或webui.Webui.dispatch() 。 dispatch()将实例化Web服务并调用调度方法(用户提供 - 您 - 或支持参数解析器(如argh )的调度方法)
get()和getone()包含dispatch()方法和收益结果,并在Web表单中提交结果,提供了一个类似于parse_args()方法的接口。
argparseweb需要web.py可用。您可以使用: pip install web.py安装它(查看最新版本)
此示例将设置HTTP服务器,获取一个有效的输入,向下撕下HTTP服务器,打印一条欢迎消息以示出:
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作为第一个命令行参数,设置开发Web服务器(默认为 *:8080),并可以使用。
公开支持WSGI接口的application全局对象。一旦您用正确的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中
完毕: