2017-09-08 10 views
0

私はこの小さなプログラムを持っています。今私は2つのグローバル変数を使用して以前の変数状態を保存し、1を加えます。誰かがグローバル変数を使うことを伴わない、これを行うためのいくつかの方法を提案してくれるのではないかと思います。これらのグローバル変数を非グローバル変数に変更するにはどうすればよいですか?

注:これにUIやフロントエンドはありません。 Googleの家のためのウェブフックなので、ちょうど座っているサーバー側が物事を前後に送る。

import random, time, os, atexit 
from datetime import datetime 
from random import choice 
from random import shuffle 
from flask import Flask, current_app, jsonify 
from flask_assistant import Assistant, ask, tell, event, context_manager, request 
from flask_assistant import ApiAi 

app = Flask(__name__) 
assist = Assistant(app) 
api = ApiAi(os.environ['DEV_ACCESS_TOKEN'], os.environ['CLIENT_ACCESS_TOKEN']) 

random.seed()   
interrupt_count = 0 
frustration_level = 0 

def reset_things(): 
    global interrupt_count 
    interrupt_count = 0 
    print("!reset_things: {0}, {1}".format(interrupt_count, frustration_level)) 

@assist.action('greeting') 
def hello_world(): 
    speech = 'This is the unxepected machine' 
    return ask(speech) 

@assist.action('fallback', is_fallback=True) 
def say_fallback(): 
    print(dir(Assistant.request)) 
    resp = request['result']['resolvedQuery'] 
    default_resp = "boogie boo" 

    # if the user said soemthing 
    if resp: 
     # update the global variable 
     global interrupt_count 
     interrupt_count+=1 
     global frustration_level 
     if not interrupt_count % 3: 
      frustration_level+=1 
     print("!fallback: {0}, {1}".format(interrupt_count, frustration_level)) 
     print(parrot) 
     return ask(parrot) 
    else: 
     print(default_resp) 
     return(default_resp) 

@assist.action('help') 
def help(): 
    speech = "I am the help section" 
    return ask(speech) 

@assist.action('quit') 
def quit(): 
    reset_things() 
    speech = "Leaving program" 
    return tell(speech) 


if __name__ == '__main__': 
    app.run(debug=True, use_reloader=False) 
+1

外部ストレージを使用してください。データベースなど。とにかく、いくつかのインスタンスを開始し、それらの変数を共有しないので、それは実際のサーバーにとって必須です。 – spectras

+1

いつでも 'interrupt_count'の値を前後に渡すことができます。 – Antimony

+0

@Antimonyあなたは精巧にできますか? –

答えて

0

最も単純な解決策は、おそらくデータをクッキーに保存することです。データベースが非常に小さく、サーバーに格納されていることを保証するのに十分ではありません。

関連する別の可能性は、urlの可変状態をサービスにエンコードし、サービスがユーザーにすべての返信でクリックする更新されたURLを提供するようにすることです。

+0

投稿を更新する必要があります。この事のフロントエンドはありません。ヘッドレスで、データをGoogleホームに渡します。だから、何もクリックする必要はありません。 –

関連する問題