【问题标题】:How to run script every time, while accessing Flask page如何每次运行脚本,同时访问 Flask 页面
【发布时间】:2020-01-04 08:03:41
【问题描述】:

我有一个 Flask 应用程序,它需要来自另一个 python 文件的数据(每次我访问 /result-var - 我希望执行 ANOTHER_FILE 并返回将 variable_with_data 更新为模板。 如果我使用 subprocess.call - 我无权访问外部变量。如果我使用 import - ANOTHER_FILE 只运行一次(要再次运行,我必须重新启动 Flask 应用程序)。但是每次从浏览器访问 /result-var 时,我都需要这个 variable_with_data

@application.route('/result-var')
def result_var():
#    subprocess.call("ANOTHER_FILE.py", shell = True)
    from ANOTHER_FILE import output_in_var
    variable_with_data = output_in_var
    return render_template('result.html', variable_with_data=variable_with_data)

请给出一个想法,我有什么选择。蒂亚!

【问题讨论】:

  • “如果我使用导入 - ANOTHER_FILE 只运行一次”是什么意思。它不应该在每次页面加载时运行一次吗?
  • 感谢您的回复!是的你是对的。它应该在每个页面加载时运行一次。但是对于来自浏览器的每个新请求,我从第一个请求中得到了相同的结果。现在它在每次烧瓶应用加载时只运行一次。

标签: python flask


【解决方案1】:

如果我正确理解了这个问题,那么您需要做的是将要从 ANOTHER_FILE 运行的内容包装到一个函数中,然后您可以调用该函数。

所以假设你有 ANOTHER_FILE 包含类似的东西:

data = read_data() 
result = process_data(data) 
output_in_var = prepare_output(result)

然后您可以将所有这些包装到一个函数中,

def produces_output_in_var():
    data = read_data() 
    result = process_data(data) 
    output_in_var = prepare_output(result)

然后调用函数显式运行代码(而不是在导入时隐式运行):

from ANOTHER_FILE import produces_output_in_var

@application.route('/result-var')
def result_var():
    variable_with_data = produces_output_in_var()
    return render_template('result.html', variable_with_data=variable_with_data)

另见:Why is Python running my module when I import it, and how do I stop it? 和这方面的 python 文档可能会有所帮助,但它们有点技术性:https://docs.python.org/3/reference/import.html

【讨论】:

  • 您好,感谢您的想法,这可能是其中一种选择!但是其他库的导入,变量,所有这些工作人员都需要转移到烧瓶应用程序中,然后呢?正确的?所以这不是最佳的
  • 很遗憾你是对的。骇人听闻的解决方案是重新导入可以让您获得导入副作用的类。我不建议这样做,这不是最佳做法!这是关于导入和类结构的一个很好的课程也就是说,在 python 2 中,您应该能够在导入之前执行 reload(ANOTHER_FILE)。在 Python imp.reload(ANOTHER_FILE)。在 Python 中 >=3.4 importlib.reload(ANOTHER_FILE)
猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多