什么Unix工具快速添加/删除一些文本到Python脚本?

Zen*_*hat 6 python unix git flask

我正在使用Flask开发一个应用程序.

我想要一种快速,自动的方式来添加和删除debug=True主函数调用:

发展:

app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

生产:

app.run()
Run Code Online (Sandbox Code Playgroud)

出于安全原因,如果我将"调试模式"保留在"野外"中,我可能会暴露有关应用程序的私人/敏感信息.

我正在考虑使用sed或awk在git钩子中自动执行此操作(生产版本保存在我推送到的裸机远程仓库中),或者将其包含在shell脚本中我将编写以启动uwsgi和其他一些"维护" - 允许应用程序正确提供的任务.

你怎么看?

bra*_*zzi 12

那不是要走的路!我的建议是创建一些配置Python模块(让我们说config.py),其中包含一些内容,例如:

DEBUG = True
Run Code Online (Sandbox Code Playgroud)

现在,在我们当前的代码中,写下这个:

import config
app.run(debug=config.DEBUG)
Run Code Online (Sandbox Code Playgroud)

现在,当你在生产环境中运行,只是改变DEBUGTrueFalse.或者您可以将此文件保持为无版本,因此开发副本与生产副本不同.这并不罕见,因为例如,在开发和生产中都没有使用相同的数据库连接参数.

即使您想自动更新它,只需使用-i标志在配置文件上调用sed .更新这个文件更安全:

$ sed -i.bkp 's/^ *DEBUG *=.*$/DEBUG = False/' config.py
Run Code Online (Sandbox Code Playgroud)


Pav*_*hov 5

您应该在服务器上设置一些环境变量.您的脚本可以检测此变量的存在并禁用调试.


Sea*_*ira 4

您可能不应该app.run在生产中使用(如果您使用 uwsgi ,您绝对不需要它)。相反,请使用Flask优秀文档的部署部分中讨论的几个部署选项之一。(只需调用执行 Python 包含的服务器即可。)app.runwerkzeug.serving.run_simplewsgiref

话虽这么说,正确的方法不是对源代码进行部署后编辑,而是使用特定于服务器的配置文件来更改您的设置,正如@brandizzi 在他的回答中指出的那样。

您可以通过几种不同的方式来做到这一点(Flask也有这方面的文档- 请参阅 Armin 关于从文件进行配置处理开发-生产切换的建议):

  1. 将您的开发和服务器的配置都包含在存储库中。使用环境变量在它们之间切换:

    # your_app.config.develop
    DEBUG = True
    
    # your_app.config.production
    DEBUG = False
    
    # your_app.app
    from flask import Flask
    from os import environ
    
    mode = environ.get("YOURAPP_MODE")
    mode = "production" if mode is None else "develop"
    
    config = __import__("your_app.config." + mode)
    
    app = Flask("your_app")
    app.config.from_object(config)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将您的生产配置与您可能需要的任何其他特定于服务器的配置一起存储在单独的存储库中。如果设置了环境变量,则加载配置。