【问题标题】:Flask program not starting webbrowser in pythonFlask程序没有在python中启动webbrowser
【发布时间】:2019-08-02 00:02:59
【问题描述】:

我正在尝试制作一个简单的程序,当您转到烧瓶中的特定 URL 时,它会打开 Web 浏览器。

我将 nginx 与 uwsgi 一起使用,与烧瓶一起工作,在 ubuntu 桌面 18.04 上运行。

from flask import Flask
import webbrowser
app = Flask(__name__)

@app.route("/test")
def test():
    #this is where a new webbrowser should be opened:
    webbrowser.open_new_tab("https://google.com") 

    return "test!"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

我希望在服务器机器上打开一个新的网络浏览器选项卡,但没有任何反应

【问题讨论】:

  • 仍在寻求帮助

标签: python nginx flask uwsgi


【解决方案1】:

您是否设置了默认浏览器?您需要一个默认设置。

来自webbrowser

如果环境变量 BROWSER 存在,则将其解释为 os.pathsep 分隔的浏览器列表,以便在平台默认值之前尝试。

来自同一 Python 参考页面的另一个示例演示了您需要打开一个窗口才能使用 open_new_tab() 函数:

这里有一些简单的例子:

url = 'http://docs.python.org/'

# Open URL in a new tab, if a browser window is already open.
webbrowser.open_new_tab(url)

# Open URL in new window, raising the window if possible.
webbrowser.open_new(url)

理想情况下,您创建一个控制器对象,从该链接中的表中指定您选择的浏览器,例如“mozilla”、“chrome”、“safari”等,然后在该控制器上使用open_new_tab() 函数。

https://docs.python.org/3.5/library/webbrowser.html#browser-controller-objects

更新:

所以我尝试了这个

import webbrowser


def main():
    # this is where a new webbrowser should be opened:
    webbrowser.open_new_tab("https://google.com")

    return "test!"


if __name__ == "__main__":
    main()

无论窗口是否打开,我都可以打开一个新标签。 所以它适用于一个简单的python脚本。

您是说当您运行烧瓶应用程序并尝试在http://yourip-or-domain-name/test 发出GET 请求时,您的浏览器无法打开? (这里假设是端口80,因为您没有在app.run() 调用中绑定显式端口。

【讨论】:

  • 如果我从终端启动 python 并运行它,它会启动但不在烧瓶应用程序中,所以我确实设置了默认浏览器。
  • 我在端口 80 上运行我的烧瓶应用程序,并通过单独的机器访问该站点。当我通过单独的机器访问网站时,我想在服务器机器上打开一个网页。当我通过开发服务器运行它时,它工作正常,但不是 nginx 的
  • 研究转发请求附带的一些标头属性。默认情况下,并非所有标头都通过 nginx 转发(我知道 auth 标头不是)。 nginx 配置文档中可能有线索,它是特定于 nginx 的吗?必须尝试替代反向代理?
猜你喜欢
  • 2021-04-03
  • 2020-07-28
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多