2016-10-25 3 views
1

Ich habe ein Problem in Arbeit. Hier ist es.Wie schreibe ich ein Python-Skript für die Interaktion mit Shell-Skripten

Ich habe mehrere Skripte (meist sind Shell-Skripte) ausgeführt, und ich möchte ein Python-Skript schreiben, um sie automatisch auszuführen. Eines dieser Shellskripts benötigt während der Ausführung die interaktive Eingabe. Was mich beunruhigte, ist, dass ich keine Möglichkeit finde, seine Eingabeaufforderung zu lesen, also kann ich nicht entscheiden, was ich eingeben soll, um fortzufahren.

vereinfacht ich das Problem etwas wie folgt aus:

Es gibt ein Skript mediator.py, benannt, die greeter.sh innen laufen. Das mediator nimmt die Eingabeaufforderung greeter und druckt es dem Benutzer, dann erhält Benutzereingabe und übergibt es an greeter. Die mediator muss vom Standpunkt des Benutzers genau wie die greeter handeln.

Hier ist greeter.sh:

#! /bin/bash 
echo "Please enter your name: " # <- I want 'mediator.py' to read this prompt and show it to me, and then get what I input, then pass my input to 'greeter.sh' 
read name 
echo "Hello, " $name 

ich dies in der folgenden Reihenfolge tun:

  1. Der Benutzer (das bin ich) laufen mediator.py
  2. Der mediator Lauf greeter.sh innen
  3. Die mediatorerhalten die Eingabeaufforderung von greeter, und geben Sie es auf dem Bildschirm aus. (Zu diesem Zeitpunkt wird die greeter für die Eingabe des Benutzers wartet. Das ist das Hauptproblem ich mit stecken)
  4. Die Benutzereingabe eine Zeichenfolge (zB ‚Mike‘), mediator die Zeichenfolge ‚Mike‘ erhalten und übertragen es greeter
  5. die greeter die Namen bekommen ‚Mike‘ und druckt einen gruß
  6. die mediator die Begrüßung erhalten, und gibt es auf dem Bildschirm.

ich für einige Lösung gesucht und bestimmt mit stdout von Teilprozess zu PIPE gerichtet Popen Funktion in subprocess Modul zu verwenden, ist es so etwas wie diese:

sb = subprocess.Popen(['sh', 'greeter.sh'], stdout = subprocess.PIPE, stdin = stdout, stderr = stdout) 

aber ich kann das Haupt nicht lösen Problem in Schritt 3 oben. Kann mir jemand Hilfe geben? Vielen Dank!

Antwort

0

Sie machen es viel komplizierter (und spröder) als es sein muss. Anstatt alles auf der obersten Ebene zu kodieren und zu versuchen, Subprozesse oder was auch immer zu verwenden, um Ihre Skripte zu verwenden, als wären sie Funktionen, schreiben Sie einfach Module und Funktionen und verwenden Sie diese aus Ihrem Hauptskript.

Hier ist ein Beispiel mit allen im Skript selbst enthalten ist, aber man kann es in verschiedene Module aufgeteilt, wenn Sie einige Funktionen zwischen verschiedenen Skripte teilen müssen

# main.py 
def ask_name(): 
    return raw_input("Please enter your name: ") 

def greet(name): 
    return "Hello, {} name !\n".format(name) 

def main(): 
    name = ask_name() 
    print greet(name) 

if __name__ == "__main__": 
    main() 
+0

Vielen Dank für Ihre Antwort zuerst. Ich habe dieses Nutzungsszenario entwickelt, weil ich es in der Arbeit getroffen habe.Ich habe mehrere Shell-Skripte zu laufen, und ich möchte ein Python-Skript schreiben, um sie automatisch auszuführen. Bei einem dieser Shell-Skripte muss der Benutzer einige Optionen eingeben, während er exexutiert. Daher muss ich die Eingabeaufforderung des Shell-Skripts abrufen und dann bestimmen, welche Option für die weitere Ausführung eingegeben werden soll. Das ist es. –

+0

Sie sollten Ihre Frage dann mit diesem Kontext bearbeiten - das ist ein etwas anderes Problem. Was ich einem 'Subprozess'-Experten FWIW überlassen werde ... –

+0

Danke ~ Die Frage wurde jetzt neu beschrieben. –

Verwandte Themen