2016-09-15 5 views
0

Ich benutze Python 2.6.6 und ich kann nicht aktualisieren.Wie bekomme ich die Antwort von einem Befehl redisis

Ich hatte es funktioniert gut mit subprocess.check_output, aber ich wusste nicht, dass wir Python 2.6.6 verwenden und ich kann es nicht auf meinem Ende aktualisieren.

Ich versuchte dies: richtig, haben die docs somethign wie

command = "redis-cli hget some_key some_field" 
command_output = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0] 

Aber ich glaube nicht, dass ich in den Befehlen bin vorbei:

subprocess.Popen(['ls', 'li'], ..) 

Antwort

1

Yup, sollten Sie eine Liste verwenden zu geben deine Befehlszeile.

command = ["redis-cli", "hget", "some_key", "some_field"] 
command_output = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0] 

Relevante von Moses Koledoye @

command.split() funktioniert die Umwandlung aufzulisten.

Der Grund, warum sie das getan haben, ist ziemlich einfach: jedes gegebene Argument wird direkt an das redis-cli Programm weitergeleitet. Lassen Sie uns in Details gehen:

Stellen Sie sich vor Sie haben dies:

key = raw_input("Please give me the key:") 
os.system('redis-cli bla bla %s' % key) # DON'T DO THIS AT HOME. 

Nun stell dir vor ich bin ein bösartiger Kerl, und ich geben Sie die folgenden Schritte aus: || echo "hacked by h4x0r". Der endgültige Befehl sieht wie folgt aus:

redis-cli bla bla || echo "hacked by h4x0r" 

Liste verwenden. Ja wirklich.

+0

Auf einer Randnotiz, wie OP es hat, führt 'command.split()' die Konvertierung zur Liste durch. Könnte eine Erwähnung wert sein. –

+0

Kein großer Fan, da es zu unerwartetem Verhalten führen kann. Aber ja, erwähnenswert in diesem Fall :) – FunkySayu

+0

command.split() teilt '' '1, 2," Hallo Welt "' '' ' –

Verwandte Themen