2014-02-05 3 views
0

저는 현재 python으로 명령 행 구동 스크립트를 작성하기 위해 argparse를 사용합니다. 나는이 스크립트 중 많은 것을 프론트 엔드로 제공하는 서버를 만드는 것을 고려 중이다. (일부 컴퓨터는 로컬로 실행하기 위해 RAM, 처리 속도 등이 없을 수도있다). 그래서 나는 웹 페이지를 통해이 스크립트에 연결하는 다양한 방법에 대해 궁금합니다.HTML 폼과 argparse

목표는 argparse 콘텐츠에서 생성 된 웹 페이지에 해당하는 것입니다 (예 : 선택 항목이 콤보 상자로 표시되고 부울 인수는 체크 상자 등으로 표시됨). argparse가 꽤 잘 정의되어 있기 때문에 필요한 HTML을 생성하기 위해 argparse 함수에 대한 래퍼를 생성하는 것이 가능할 수도 있습니다.

고통없이 어떻게 할 수 있습니까?

편집 : 다음은 내가 구상하는 예입니다.

다음은 argparse를 사용하는 간단한 스크립트이며 그 아래에는 argparse에서 번역 된 일부 html이 있습니다. HTML을

import argparse, sys 

parser = argparse.ArgumentParser() 
parser.add_argument('-f', '--file', nargs='?', help="The fasta file to process.", type=argparse.FileType('r'), default=sys.stdin) 
parser.add_argument('-o', '--out', nargs='?', help="The file to write processed file to.", type=argparse.FileType('w'), default=sys.stdout) 
parser.add_argument('--something', help="This does something", choices=['a','b'], type=str, default='a') 
parser.add_argument('--somethingelse', help="This does something else", action='store_true', type=bool) 

def main(): 
    args = parser.parse_args() 
    #do stuff here such a reading in files, processing, and delivering output 

if __name__ == "__main__": 
    sys.exit(main()) 

는이처럼 (나는 HTML에서 끔찍한, 그래서 아마 잘못/해킹)

<form> 
File: <input type="text" name="file"><br> 
Out: <input type="text" name="out"><br> 
<select name="something"> 
<option value="a" selected>a</option> 
<option value="b">b</option> 
</select><br> 
Somethingelse: <input type="checkbox" name="somethingelse" value="true"><br> 
<input type="submit" value="Submit"> 
</form> 

다음 서버가 그와 함께 스크립트를 실행하는 원인이 제출 타격 매개 변수. 본질적으로, 나는 내 서버가 입력 한 것처럼 명령을 보내길 원한다. 만약 우리가 출력 파일을 가지고 작업한다면, 사용자에게 무언가를 다운로드 할 수있다. (그러나 그것은 다른 시간 동안 문제가된다.)

+0

난 당신이 [장고] 들여다 제안 할 수 있습니다 (https://www.djangoproject.com/)? – 2rs2ts

+0

내가 틀렸다면 나에게 장고로 많이 놀지는 않았지만 정정하십시오 : 장고에 코드를 작성하여 양식을 만든 다음 장고가 보내는 스크립트를 작성하십시오. 스크립트를 업데이트하면 양식을 업데이트해야합니다. 양식이 스크립트에서 생성 된 경우 스크립트를 변경해야만하고 양식이 자동으로 최신 상태로 유지 될 것이라고 생각합니다.그 방법은 단지 1 단계이고 1 파일 만 유지하면됩니다. – Chrismit

+0

정확하게 작동하는 것은 아닙니다. 두 개의 파일을 유지할 필요가 없습니다. Django보기와 일부 템플리트 HTML을 사용하여 양식을 생성하지만 동일한보기가 양식 제출을 처리 할 수도 있습니다. [문서] (https://docs.djangoproject.com/en/dev/topics/forms/#using-a-form-in-a-view)를 확인하십시오. 본질적으로 파이썬 파일이 장고가하는 웹 페이지를 생성하는 것에 대해 이야기하고 있습니다. – 2rs2ts

답변

1

이것은 대략 당신이하고 싶은게 뭐야? 나는 parseraction의 속성에서 사전을 생성하고, form 문자열의 슬롯을 채우기 위해 사람들을 사용하고

ArgumentParser(prog='stack21586315.py', usage=None, description='sample parser', 
    version=None, formatter_class=<class 'argparse.HelpFormatter'>, 
    conflict_handler='error', add_help=True) 

_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, 
    default=None, type=None, choices=None, help=None, metavar=None) 

<form name="stack21586315.py action="html_form.xxx" method="get"> 
sample parser 
<input type="text" name="foo"><br> 
<input type="submit" value="Submit"> 
</form> 

: 표시

import argparse 
parser = argparse.ArgumentParser(description='sample parser') 
arg1 = parser.add_argument('--foo') 
print parser 
print arg1 

html = """ 
<form name="%(prog)s action="%(action)s" method="get"> 
%(description)s 
<input type="text" name="%(dest)s"><br> 
<input type="submit" value="Submit"> 
</form> 
""" 
d = vars(parser) 
d.update(vars(arg1)) 
d['action'] = 'html_form.xxx' 
print html%d 

.


기본 WSGI 함수 start_response 통해 response를 전송하는 것을 포함하고합니다 (envirion 인수 여기)를 수용 request. 세부 사항은 프레임 워크에 따라 다릅니다.

이 모듈 (및 기능)의 URL은 양식 action 속성에 지정됩니다. 값을 보내는 방법은 method (get/post)에 따라 다릅니다. 값은 environ['QUERY_STRING']에 있습니다. cgi 또는 urlparse 모듈 (또는 프레임 워크 참조)에서이 문자열을 구문 분석하기위한 다양한 도구가 있습니다. 파싱 ​​된 요청은 결국 vars(args)처럼 보일 것입니다.

def my_send_app(environ, start_response): 
    status = '200 OK' # HTTP Status 
    headers = [('Content-type', 'text/plain')] # HTTP Headers 
    start_response(status, headers) 

    # The returned object is going to be printed 
    # create the HTML including the form; return as list of strings 
    return [...] 

def my_receive_app(envirion, start_responce): 
    # Returns a dictionary containing lists as values. 
    d = urlparse.parse_qs(environ['QUERY_STRING']) 
    # d should be similar to vars(args) 
    # apply the values in d 
    # use start_responce to reply to the browser 

http://webpython.codepoint.net/wsgi_request_parsing_get

+0

감사합니다.이 솔루션을 함께 긁어 모으기에 충분하다고 생각합니다. – Chrismit