2016-11-11 8 views
0

eine Funktion zu schreiben versucht, das die Ausgabe eines Shell-Befehl liest, bevor sie eine Entscheidung .. Zum Beispiel:Python Aufruf-Shell-Befehl und Antwort überprüfen

6 def getCreds(): 
    7   global access_key, secret_key, yourName 
    8   access_key = raw_input("Enter Access Key: ") 
    9   secret_key = raw_input("Enter Secret Key: ") 
10   infoCorrect = raw_input('Is this information correct? (y or n)') 
11   if infoCorrect.lower() == "yes" or infoCorrect.lower() =="y": 
12     call (["./somecommand -u %s -p %s -flags" % (access_key, secret_key) +  tfdir],shell=True) 
13   else: 

Der Ausgang des Shell-Befehl ist entweder

"You have successfully logged in" 
or 
"you cannot log in" 

So weiß ich nicht, die richtige Syntax zu gehen:

if response = "You have successfully logged in" : 
(some action) 
elif: 
(some action) 

Wie lese ich die Antwort?

Danke!

+0

Wenn Sie dies regelmäßig tun, gibt es Convenience Wrapper zur Verfügung. Einer von ihnen: https://github.com/Chiel92/python-shellout (Disclaimer: Ich schrieb es) –

+0

@chowpay, ist Ihr Problem gelöst? – Shasha99

Antwort

1

Verwenden Sie Popen() Methode definiert in subprocess und umleiten Sie Ihre Ausgabe zu PIPE. versuchen Sie diesen Code:

import subprocess 

p = subprocess.Popen("ls", shell=True, stdout = subprocess.PIPE) 
output,err = p.communicate() 
print(output) 
1

Ich glaube nicht, Ausgabe von shell Befehl zurückgegeben werden kann. Sie konnten nur überprüfen, ob der Befehl erfolgreich war oder einen Fehler zurückgegeben hat.

Nachdem gesagt, dass Sie Ihre Ausgabe in eine Datei umleiten und dann den Inhalt überprüfen können.

f = open("outputFile","wb") 
    call (["./somecommand -u %s -p %s -flags" % (access_key, secret_key) +  tfdir],shell=True,stdout=f) 

Wenn Sie mit dem Schreiben vermeiden wollen, dann auf Datei, die Sie bei StringIO Modul suchen möchten.

+0

gibt es einen besseren Weg, dies zu tun, anstatt einen Shell-Befehl zu verwenden? Was schlagen Sie vor? – chowpay

+0

besserer Weg, was zu tun? Ich meine Ihre Frage besagt, dass Sie die Ausgabe Ihres Shell-Befehls erhalten möchten, um eine Ausgabe des Shell-Befehls zu erhalten, müssen Sie ausführen, Was genau Ihr Shell-Befehl tut? es könnte einen Weg geben, das gleiche mit Python-Bibliothek zu erreichen –

+0

Sorry, was ich sagen wollte, ist, wenn es eine bessere Möglichkeit gibt, die Antwort von einem Shell-Befehl zu verwenden, der über Python ausgegeben wird. Mit diesem Shellbefehl "./somecommand" senden Sie einfach den Benutzernamen und das Passwort an den Webservice. Wenn es erfolgreich ist, gibt der Dienst eine Antwort zurück "Sie haben sich erfolgreich angemeldet". Mit 'call' kann ich nur einen Shell-Befehl in Python ausgeben. Aber ich frage mich, ob es eine bessere Möglichkeit gibt, diesen Befehl in Python auszugeben und die Antwort zu bewerten. Wie du vielleicht gesagt hast, über eine Python-Bibliothek, von der ich nichts weiß. Danke - python n00b – chowpay