【问题标题】:Why does manage.py execution script run twice when using it under if __name__ == "__main__"if __name__ == "__main__" 下使用manage.py执行脚本为什么会运行两次
【发布时间】:2014-03-11 11:14:05
【问题描述】:

目标。 启动 django 框架时,还会启动其他依赖 django 对象的 PY 脚本。 从配置文件中获取服务器和端口号。

问题: Popen 似乎运行了两次,我不知道为什么?

#!/usr/bin/env python
import os
import sys
import subprocess
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test.localsettings")
from django.core.management import execute_from_command_line

def getargs(): 
    try:
        f = open("config")
        data = []
        for line in f:
            data.append(line)
        f.close()
        server = data[0].rstrip()
        port = data[1]
        newargs = ['lmanage.py', 'runserver', server + ':' + port]
        return newargs

    except Exception as e:
        print e
        pass

if __name__ == "__main__":

    #Launching Checker
    try: 
        checker = subprocess.Popen([sys.executable, os.path.join(os.getcwd() + "checker.py")], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        print checker.pid
    except Exception as e:
        print e
        pass 
    print "end"

    execute_from_command_line(getargs())

输出:

16200
end
29716
end
Validating models...

这是我的第一次尝试,如果有人知道更好的方法,请随时告诉我。

谢谢大家。

【问题讨论】:

  • 这个脚本是否被称为checker.py
  • @Martijin Pieters No. 上面脚本的名称是 lmanage.py。
  • @cph 我很确定你的问题是重新加载器。尝试使用--noreload 发出runserver 命令。
  • @Louis - 你是对的。你想回答积分吗?
  • 只是为了将您链接到有关其他解决方案的更多信息:stackoverflow.com/questions/6791911/…

标签: python django popen


【解决方案1】:

您的代码正在启动 runserver 命令,这导致 Django 使用 reloader,这反过来意味着您的代码被重新执行,就好像它是在命令行中输入的一样。如果您在启动 runserver 时使用 --noreload,问题将消失。

因此,基本上,在您修改源文件时自动重新加载 Django 的相同功能(在开发中非常有用)现在导致您的代码执行两次。

【讨论】:

    猜你喜欢
    • 2018-11-22
    相关资源
    最近更新 更多