如何运行外部命令(Django)来覆盖服务器中的文件?

时间:2016-03-31 14:54:17

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

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

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,但我不知道可能是什么问题......

任何想法的人?

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您有两个问题: a)你希望shell在调用视图函数时执行某些操作。我已经发出警报。 b)你想加载新模型。它不会发生。您必须重新加载才能加载新代码(模型内省等)。可能你使用runserver命令,看看Django自动加载器代码:https://github.com/django/django/blob/master/django/utils/autoreload.py

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

我会触摸某些内容或删除.pyc文件以强制重新加载。