Identifizieren, wenn ein Python-Skript auf eine manuelle Eingabe wartet

Identifizieren, wenn ein Python-Skript auf eine manuelle Eingabe wartet

Ich schreibe ein Shell-Skript, das ein Python-Skript ausführt. Das Python-Skript wird angehalten, damit eine manuelle Eingabe erfolgen kann. Ich möchte jedoch nicht jedes Mal die Eingabetaste drücken müssen, um das Skript zu starten. Stattdessen möchte ich die manuelle Eingabe vom ausgeführten Shell-Skript übergeben.

Helfen Sie mir bitte, wenn es eine Möglichkeit gibt, das zu tun.

Antwort1

Wenn nur eine Eingabe erforderlich ist, verwenden Sie einfach echoeine Pipe:

echo | python script.py

echodruckt eine leere Zeile (mit Zeilenumbruch) auf die Standardausgabe und leitet diese dann in die Eingabe des Python-Skripts ummit|. Wenn Python von der Standardeingabe liest, erhält es eine leere Zeile und fährt fort.

Wenn das Skript mehr als eine Eingabetaste erfordert, können Sie dieyesBefehlund eine Pfeife:

yes "" | python script.py

Der yesBefehl druckt dieselbe Zeile immer und immer wieder in die Standardausgabe. Standardmäßig ist die Zeichenfolge y, aber hier machen wir sie zu einer leeren Zeichenfolge, sodass es immer nur Zeilenumbrüche sind.


Wenn die Eingabetaste als Antwort auf eine bestimmte Eingabeaufforderung erforderlich ist und Sie zu anderen Zeiten andere Eingaben benötigen, verwenden Sieexpect, eine „Tcl-Erweiterung, mit der Sie Interaktionen mit interaktiven Programmen automatisieren können“.

Es ist möglich, Ihr Shell-Skript so zu schreiben, dass es die Python-Ausgabe liest und neue Eingaben dafür erzeugt, aber ich empfehle das nicht besonders. Wenn Sie das tun möchten, lesen SieIO-Umleitung im Advanced Bash Scripting Guide: Dazu müssen Sie Dateideskriptoren klonen. Sie können auchmkfifound erstellen Sie benannte Pipe-Dateien, aus denen Sie dann normal lesen und in sie schreiben können.

Ehrlich gesagt würde ich über alternative Ansätze nachdenken, wenn Sie an den Punkt gelangen, an dem Sie einen dieser Ansätze verwenden möchten: Shell-Skripting ist hierfür einfach nicht ausgelegt und es wird viel einfacher sein, Ihr Skript beispielsweise in Python selbst zu schreiben.

verwandte Informationen