2016-06-13 2 views
1

POSTリクエストで送信する2つの引数を取る必要があるページがLoginとPasswordです。私はIndexError:フラスコから範囲外のリストインデックスを取得し続けますが、スクリプトの引数を受け取っていないため、私は推測しています。ポストデータをスクリプトフラスコに渡す

これは私のview.py

@app.route("/login/", methods=['GET','POST']) 
def login(): 
    if request.method == 'POST': 
     name = request.form['login'] 
     password = request.form['password'] 
     return redirect(url_for('test', name=name, password=password)) 
    else: 
     return render_template('login.html') 


@app.route("/test/", methods=['POST']) 
def test(): 
    name = request.form['login'] 
    password = request.form['password'] 
    input = ['/mypath/test.py', name, password] 
    a = subprocess.Popen(input, stdout = subprocess.PIPE, 
         stderr=subprocess.PIPE, 
         stdin=subprocess.PIPE) 
    out = a.communicate() 
    return out 

とフォーム

<form action="{{ url_for('test') }}" method="POST"> 
<input type="text" name="login"> 
<input type="password" name="password"> 
<input type="submit" value="Go"> 
</form> 

トレースバックです:

Traceback (most recent call last) 
    File "/usr/lib64/python3.4/site-packages/flask/app.py", line 2000, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1991, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1567, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/lib64/python3.4/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1988, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1642, in full_dispatch_request 
    response = self.make_response(rv) 
    File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1743, in make_response 
    status=status_or_headers) 
    File "/usr/lib/python3.4/site-packages/werkzeug/wrappers.py", line 778, in __init__ 
    self.status = status 
    File "/usr/lib/python3.4/site-packages/werkzeug/wrappers.py", line 886, in _set_status 
    self._status_code = int(self._status.split(None, 1)[0]) 
IndexError: list index out of range 
+0

あなたは[MCVE]このうちを作ってみることはできますか?特別な振る舞い、サブプロセスなどを使わずに特定の動作を再現するちょっとした基本的なテストケース – pvg

答えて

2

あなたのスクリプトがうまくPOSTの値を受信して​​います。ここの問題であるあなたの見解からの回答が返されています。あなたは何かを返すことはありませんFlask expects to be returned

あなたはここで、文字列のタプルを返すされています

out = a.communicate() 
return out 

Popen.communicate() method(stdout, stderr)のタプルを返すため。

2つの文字列要素を含むタプルを返すと、Flaskはそれを応答本体とし、ステータスコードとみなします。 stderrの文字列がであるため、ステータスコード('200 Ok'または'404 Not Found'などの形式である可能性があります)の解析が失敗します。

だけで標準出力結果に戻る:

stdout, stderr = a.communicate() 
return stdout 
+0

ありがとう!それはスクリプトの出力を返しました! – GreatWhite

関連する問題