簡體   English   中英

為什么在__name__ ==“ __main__”下使用manage.py執行腳本時會運行兩次

[英]Why does manage.py execution script run twice when using it under if __name__ == “__main__”

目標。 啟動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 ,這反過來意味着您的代碼將像在命令行中輸入的那樣被重新執行。 如果在啟動runserver時使用--noreloadrunserver此問題將消失。

因此,基本上,使用相同的工具在修改源文件時會自動重新加載Django(這在開發中非常有用),現在會導致您的代碼執行兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM