bir Django görünümünde subprocess.Popen kullanarak bir python komut dosyası() çalıştırılıyor ama var bu sorunu çözmek gibi olamaz. Django uygulamamın görünümünde bir python betiği yürütmek istiyorum. Bir django yönetim komutunun içinde çalıştırmak istediğim kodu koydum, böylece python manage.py command-name
komut satırından erişilebilir. Daha sonra bu komutu subprocess.Popen("python manage.py command-name",shell=True)
kullanarak çalıştırmayı denedim.Ben biraz etrafına baktım
Ancak, bu komutun yürütülmesi biraz zaman alabilir, bu nedenle görünümün devam etmesini ve komut dosyasının arka planda yürütülmesini istiyorum. subprocess.Popen yalnız komut bitene kadar asmak için görünümü neden görünmektedir kullanarak, bu yüzden (another SA sorusuna şu) bir iş parçacığı kullanarak çalıştı: o zaman
class SubprocessThread(threading.Thread):
def __init__(self, c):
self.command = c
self.stdout = None
self.stderr = None
threading.Thread.__init__(self)
def run(self):
p = subprocess.Popen(self.command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
self.stdout, self.stderr = p.communicate()
ve yürütme:
t = SubprocessThread("python manage.py command-name")
t.setDaemon(True)
t.start()
t.join()
Ancak, görünüm hala askıda kalıyor: imlecin meşgul bir sembolü var ve sayfada AJAX yüklenmiyor. Aksi takdirde, sayfanın html'i ince yükler ve iş parçacığı çağrısı normal bittiğinde (komut tamamlanmadan) görünümde komutlar gibi görünür. Birisi bana yardım edebilir mi? Komut dosyasını, görünümü veya AJAX çağrılarını tutmadan, kendi işini yürütmesini ve yapmasını istiyorum.
Düzenli benzer bir model kullanmak gerçek zamanlı operasyon üzerinde duruldu ve ben düzenli bir şey dönmek için unutmak edilir görüntülemeyi, tarayıcıyı askıya almayı. Daha sonra, bir HttpResponse'yi geri almayı unuttuğum sırada alt yükleniciyi suçluyorum. Şunu kontrol et! – Dunatotatos