![](/img/trans.png)
[英]python manage.py shell < scripts/myscript.py not working when the file contains if __name__ == '__main__'
[英]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
時使用--noreload
, runserver
此問題將消失。
因此,基本上,使用相同的工具在修改源文件時會自動重新加載Django(這在開發中非常有用),現在會導致您的代碼執行兩次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.