Ich habe ein einfaches Python-Programm geschrieben, um das Verhalten des von Ihnen beschriebenen Programms zu simulieren. Dies versetzt uns alle in die Lage, über das Mindeste zu reden, anstatt davon auszugehen, wie Ihr Programm funktioniert. (Natürlich, wenn Ihr Programm nicht so funktioniert, wie ich es hier beschrieben habe, bitte korrigieren Sie mich.
)
#!/usr/bin/python
def read_a_file():
print('Type the contents of a file now.')
while True:
try:
s = raw_input('>')
except EOFError:
break
read_a_file()
read_a_file()
print('We have now read two files. Quitting.')
Sie können dieses Skript auszuführen, geben Sie den Inhalt der ersten Datei, drücken Sie CTRL-D, um den Inhalt der zweiten Datei eingeben, drücken Sie CTRL-D, und das Programm beendet. Dies scheint das Verhalten zu sein, das Sie beschreiben.
Mein erster Gedanke war zu erwarten, wie das Chaos vorgeschlagen. Ich kann jedoch keine Unterstützung darin finden, den Inhalt einer Datei an einen Prozess zu übergeben. (Ich nehme an, die Inhalte der Dateien sind jedes Mal anders. Wenn sie gleich sind, dann würde erwarten, würde funktionieren, nur durch den Inhalt der Dateien in das Expect-Skript.)
Ich sollte beachten, dass ich bin keineswegs ein expect expert; es gibt vielleicht einen Weg, dies zu tun, was mir nicht klar ist.
Mein zweiter Gedanke war, ein Python-Skript zu schreiben, das Ihr Programm startete, und fütterte es den Inhalt der Dateien und der EOF-Zeichen. Jonathan Lefflers Kommentare ließen mich jedoch denken, dass Echo-EOF-Charaktere nicht funktionieren würden.
Mein dritter Gedanke ist verdammt kludgy. Sie könnten ein Skript schreiben, das ein expect-Skript erstellt, indem Sie den Inhalt der Dateien in das expect-Skript einbetten und dann das expect-Skript ausführen. Ich vermute, das würde funktionieren.
Wie zeigt der Benutzer das Ende aller Dateien an? Zwei Control-Ds in einer Reihe? Der Standardentwurf für Unix-Programme lautet "Lese Dateien, die auf der Kommandozeile genannt werden; wenn es keine solchen Dateien gibt, verarbeite Standardeingabe". Wenn Sie dieses Design übernehmen, gibt es keine Probleme. Sie rufen einfach 'myprogram file1.txt file2.txt' auf. –