目标。当启动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...
这是我的第一次尝试,因此,如果有人知道更好的方法,请随时告诉我。
谢谢大家。
您的代码正在启动runserver命令,这将导致Django使用reloader,这反过来意味着您的代码将像在命令行中输入的那样被重新执行。如果您--noreload在启动时使用runserver,问题将消失。
runserver
--noreload
因此,基本上,使用相同的工具在修改源文件时会自动重新加载Django(这在开发中非常有用),现在会导致您的代码执行两次。