![](/img/trans.png)
[英]How to save output from django call_command to a variable or file
[英]Django - Script called from view with call_command connects to Pyro server script but freezes on model access
我已經運行了Django應用程序,並獲得了一個包含帳戶及其狀態列表的界面。 在界面中,我可以選擇單擊一個按鈕來啟動一個帳戶。
這將調用名為“ start_session”的視圖,該視圖將通過django.core.management.base中的call_command函數啟動腳本,並將帳戶的主鍵作為參數。 這是一個Pyro客戶端腳本,它將向運行中的Pyro服務器腳本發送命令以啟動帳戶(目前,它只是將狀態從“關閉”更改為“開啟”,但最終可能是必須運行並做幾個小時)。
當我嘗試獲取與給定主鍵匹配的Account模型的實例並嘗試更改狀態,甚至嘗試將帳戶狀態返回給Pyro客戶端時,它將凍結。 請注意,如果我只是返回帳戶狀態,它只會凍結,直到用CTRL-C中斷Pyro服務器腳本,然后Pyro客戶端腳本會打印出帳戶狀態。 但是更改帳戶狀態從來沒有奏效。
任何幫助或建議,不勝感激!
views.py
from django.shortcuts import redirect
from django.contrib.auth.decorators import login_required
from django.core.management import call_command
@login_required
def start_session(request, account_pk):
call_command('pyro_client', account_pk)
return redirect('/control_panel')
pyro_client.py
import Pyro.core
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
def add_arguments(self, parser):
# Positional arguments
parser.add_argument('account_pk', nargs='+', type=str)
def handle(self, *args, **options):
for account_pk in options['account_pk']:
pyro_server = Pyro.core.getProxyForURI("PYRO://192.168.1.7:7766/c0a8010723ac22123332ff93e89e5328")
pyro_server.command(account_pk, 'start')
pyro_server.py
import Pyro.core
from flipper.models import Account as AccountModel
import traceback
class PyroServer(Pyro.core.ObjBase):
def __init__(self):
Pyro.core.ObjBase.__init__(self)
def command(self, account_pk, command_value):
try:
if command_value == 'start':
self.start_account(account_pk)
except Exception, e:
return traceback.format_exc()
def start_account(self, account_pk):
account = AccountModel.objects.get(pk=account_pk)
account.state = 'ON'
account.save()
Pyro.core.initServer()
daemon=Pyro.core.Daemon()
uri=daemon.connect(PyroServer(),"pyro_server")
print "The daemon runs on port:",daemon.port
print "The object's uri is:",uri
daemon.requestLoop()
您正在鏈接到Pyro4庫的文檔,但是您的代碼使用的是古老且不再受支持的Pyro庫版本3! 通過使用當前版本的Pyro4(撰寫本文時為4.45),許多問題都會消失,包括希望解決“凍結”問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.