2014-10-24 13 views
9
Ben benzer bir komut dosyası içinde Django komutları arıyorum

dosyaya:Nasıl bir değişkene Django call_command çıkışı kaydetmek veya

#!/usr/bin/python 
from django.core.management import call_command 
call_command('syncdb') 
call_command('runserver') 
call_command('inspectdb') 

nasıl örnek call_command için çıktı atamak için ('inspectdb') bir değişkene mi yoksa bir dosyaya mı? Ben

var = call_command('inspectdb') 

ama 'var' denedim

hiçbiri kalır: amaç: django Sen call_command çıkışını yönlendirmek zorunda

+0

olası yinelenen (http://stackoverflow.com/questions/11546151/how-to-make-db-dumpfile- in-django) ve [json'u dosyaya kaydetmek için dumpdata komutuyla çağrı komutunu kullanma] (http://stackoverflow.com/questions/16075789/how-to-use-call-command-with-dumpdata-command-to -save-json-to-file) – fredtantini

cevap

9

tarafından oluşturulmamış eski veritabanlarında mevcut tabloları incelemek, aksi takdirde sadece yazdırır stdout ama hiçbir şey döndürmez. yerine, çıkışını yönlendirmek için bir StringIO oluşturmak için bir iki yıl sonra bu baktığımızda, daha iyi bir çözüm olacaktır:

with open('/tmp/inspectdb', 'w+') as f: 
    call_command('inspectdb', stdout=f) 
    var = f.readlines() 

DÜZENLEME

: Bu gibi okuma sonra, bir dosyaya kaydetme deneyebilirsiniz gerçek bir dosya. İşte bir Django's test suites ait bir örnek: [nasıl yapılır db dumpfile django] arasında

def test_command(self): 
    out = StringIO() 
    management.call_command('dance', stdout=out) 
    self.assertIn("I don't feel like dancing Rock'n'Roll.\n", out.getvalue()) 
+0

bunu denedi, ancak işe yaramaz gibi görünmüyor, var komut satırında inspectdb çalıştırılırken boş bir liste haline gelir. Alt süreçleri deneyeceğim. – Fenrir

+0

FWIW muhtemelen komutta çıkışı yapmak için self.stdout.write() kullanmıyordunuz. –

+0

Stdout = f'nin bunu, stdout'un kullanılacağı komut yapıcısına nasıl yaptığını anlamıyorum. 'call_command'' load_command_class (app_name, name) 'çağrısında bulunur ve stdout'u geçmez ve Command,' module.Command() 'gibi bir argüman içermez. Ve işte Komutanın yapıcısı: 'def __init __ (self, stdout = Hiçbiri, stderr = Yok, no_color = False):' – Matt

İlgili konular