2017-06-23 8 views
0

Ich habe ein Python-Skript, das ich anrufe, um es an Django manage.py shell umzuleiten.Lesen von Eingaben von StdIn beim Umleiten von StdIn an Python manage.py shell

$ python manage.py shell < script.py 

Ich möchte eine Antwort vom Benutzer zu entscheiden, was zu tun ist. Aber ich kann es auch nicht mit input() oder sys.stdin.readline() tun.

Mit dem Eingang()

answer = input('A question') 
if answer == 'y': 
    # Do something 
else: 
    pass 

Fehler:

EOFError: EOF when reading a line 

Mit sys.stdin.readline:

answer = sys.stdin.readline() 
if answer == 'y': 
    # Do something 
else: 
    pass 

In diesem Fall Skript, ohne warten weiter Benutzereingabe.

Was ist der richtige Weg dafür?

+0

Warum übergeben Sie die Zeichenfolge "A question" an readline()? –

+0

Sorry, ich habe die Frage korrigiert. – Caco

+0

Hast du es probiert mit raw_input() anstelle von input()? – JohnDoe

Antwort

1

Sie machen ./manage.py shell erhalten einige Eingaben, aber die Eingabe, die Sie zur Verfügung gestellt haben, war der Inhalt von script.py.

Es wäre viel netter, eine benutzerdefinierte Django management command zu schreiben. Zum Beispiel:

from django.core.management.base import BaseCommand 

class Command(BaseCommand): 
    def handle(self, *args, **options): 
     answer = input('A question') 
     if answer == 'y': 
      # Do something 
     else: 
      pass 

, die würden Sie dann mit manage.py my_script nennen.