【问题标题】:How to Running external command (Django) for overriding files in server?如何运行外部命令(Django)以覆盖服务器中的文件?
【发布时间】:2016-07-20 02:45:15
【问题描述】:

修改后的inspectdb,我想在加载网页索引页面时运行它。所以,在我的 view.py - def index 中,我正在尝试做下一个:

def index(request):
 subprocess.Popen("rm /path/app/models.py", shell=True)
 subprocess.Popen("python2.7 /path/manage.py inspectdb_New > /path/app/models.py", shell=True)
 return render_to_response('index/index.html', context_instance = RequestContext(request))

这是行不通的。我也尝试过使用 os.system、subprocess.call,但它仍然无法正常工作。 至少对我来说,看起来我无法在执行时修改 models.py,但我不知道可能是什么问题......

有什么想法吗?

谢谢。

【问题讨论】:

    标签: python django python-2.7 django-models django-views


    【解决方案1】:

    你的问题有两个部分: a) 你希望 shell 在调用视图函数时做一些事情。我已经有警报声了。 b)您要加载新模型。它不会发生。您必须重新加载才能加载新代码(模型自省等)。可能你使用 runserver 命令,看看 Django autoreloader 代码:https://github.com/django/django/blob/master/django/utils/autoreload.py

    它跟踪由 gen_filenames() 列出的文件,并在发生更改时重新加载。您的模型未列出,因此不会反映对代码的更改。

    我会触摸一些东西或删除 .pyc 文件以强制重新加载。

    【讨论】:

    • 我检查了 autoreloader,这不是我需要的。我创建了一个自定义 Django 管理员,因此我使用我需要的特定代码覆盖了 inspectdb 以生成 models.py 和 admin.py。此外,当有人(通过 MySQL)对 ddbb 模式进行更改时,我想动态生成新的 models.py 和 admin.py,并且这些更改应该在不停止服务器的情况下反映在 Web 上(它应该一直启动)。最后我停止了,我将停止服务器,启动新的检查数据库,然后我将再次启动服务器以使这些更改反映在网络上......无论如何,感谢 peroksid 的帮助。干杯伙伴。
    【解决方案2】:

    您无法在网络服务器运行时更​​改您的 models.py,因为模型(和其他 python 代码)仅在服务器启动时加载。

    【讨论】:

    • 我不太确定。我认为服务器每隔一段时间都是咨询模型。我现在正在尝试: subprocess.Popen("python2.7 /path/manage.py inspectdb > /path/app/models1.py", shell=True) subprocess.Popen("mv /path/models1.py /path /models.py", shell=True) 这有时是有效的。我想当服务器正在咨询模型并且外部命令同时覆盖时,网络正在崩溃,模型完成为空,但在其他时候有效(再次猜测,当覆盖与服务器的咨询不匹配时)......跨度>
    • 没有。模型仅在启动时加载。也许你解释了你想要达到的目标。可能有更好/更简单的解决方案。
    • 好吧,我想在每次有人修改 ddbb(擦除、添加、修改表格……)时更新模型,并且这些更改将反映在网络上(网络总是启动)跨度>
    • 也许你可以解释一下这个用例。为什么要在 django 之外修改表?
    • 正如我所说,django 只会在服务器启动时读取模型。如果你改变了你的 models.py,你必须重启你的服务器。
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2015-08-24
    • 1970-01-01
    相关资源
    最近更新 更多