Ho scritto un semplice programma Python per simulare il comportamento del programma che descrivi. Al minimo, questo ci mette tutti nella posizione di parlare della stessa cosa invece di assumere come funziona il tuo programma. (Naturalmente, se il tuo programma non funziona nel modo in cui lo sto descrivendo qui, per favore correggimi.)
#!/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.')
È possibile eseguire questo script, digitare il contenuto del primo file, premere Ctrl-D, digitare il contenuto del secondo file, premere CTRL-D, e il programma termina. Questo sembra essere il comportamento che stai descrivendo.
Il mio primo pensiero è stato quello di aspettarmi, come suggerito dal caos. Tuttavia, non riesco a trovare alcun supporto in attesa di piping il contenuto di un file in un processo. (Suppongo che il contenuto dei file sia diverso ogni volta. Se sono uguali, allora aspettarsi funzionerebbe, semplicemente inserendo il contenuto dei file nello script expect.)
Devo notare che sono in nessun modo un esperto prevedi; potrebbe esserci un modo per farlo che non è ovvio per me.
Il mio secondo pensiero è stato quello di scrivere uno script Python che ha lanciato il tuo programma, e alimentato il contenuto dei file e dei caratteri EOF. Tuttavia, i commenti di Jonathan Leffler mi hanno fatto pensare che l'eco dei personaggi EOF non avrebbe funzionato.
Il mio terzo pensiero è davvero dannatamente triste. È possibile scrivere uno script che crei uno script previsto collegando il contenuto dei file allo script expect e quindi eseguendo lo script expect. Sospetto che funzionerebbe.
Come indica la fine di tutti i file? Due controlli-D di fila? Il design standard per i programmi Unix è "leggere i file indicati sulla riga di comando, se non ci sono file di questo tipo, elaborare lo standard input". Se si adotta questo design, non ci sono problemi; invochi semplicemente "myprogram file1.txt file2.txt". –