このWeb.Pyベースのシンプルモジュールを使用すると、Advanced argparse.ArgumentParserオブジェクトおよび同様の( argh.ArgumentParser )のものから単純なHTTP Webサーバーを自動的にセットアップできます。これを使用すると、アプリケーションで定義されている単純な関数から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() lap dispatch()メソッドとweb形式で送信した結果、結果を生成し、 parse_args()メソッドに似たインターフェイスを提供します。
argparseweb 、 web.pyを利用可能にする必要があります。あなたはそれをインストールすることができます(最新バージョンをチェックしてください): pip install web.py
この例は、HTTPサーバーをセットアップし、1つの有効な入力を取得し、HTTPサーバーを引き裂き、歓迎のメッセージをSTDOUTに印刷して終了します。
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ユーティリティ用の3つの操作モードが含まれています。
最初と最もシンプル: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にあります
終わり: