J'ai un programme qui m'oblige à saisir des données pendant l'exécution du programme. Imaginez quelque chose comme ça:
$ ./program
Hi there. What's your name? Zambezi
What is your quest? To make a program which runs nicely
What is your favourite color? Red
...
Maintenant, j'ai un certain nombre d'entrées de test pour exécuter mon programme. Ils contiennent tous quelque chose comme:
Arthur, King of the Britons
To seek the Holy Grail
...
Cependant, certains de mes scripts de test échouent, et malheureusement, il m'est très difficile de déchiffrer exactement où ils ont échoué, car mon terminal ressemble à ceci:
$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...
Existe-t-il un moyen de donner une entrée stdin
via un fichier, tout en laissant le terminal apparaître comme si j'avais tout tapé?
Linux Mint 16 est mon système d'exploitation si cela importe.
Réponses:
Au lieu d'utiliser la redirection d'entrée (./program <arthur.txt), qui ne fait que mettre en mémoire tampon les entrées de votre programme, vous devez utiliser des outils tout comme "attendre" pour attendre la question et envoyer les réponses une par une.
De meilleurs exemples: http://www.pantz.org/software/expect/expect_examples_and_tips.html
la source
expect
script qui sait ce qui provoque les problèmes de votre programme et sait alimenter votre programme la troisième ligne d'entrée en réponse à la "Quelle est votre couleur préférée?" question - puis demandez auexpect
script de lire learthur.txt
fichier (ou tout autre fichier spécifié, correctement structuré) pour obtenir ces entrées, plutôt que de les avoir codées en dur dans le script.C'est exactement ce à quoi
tee
sert.Par exemple:
Ce qui se passe ici, c'est que tee prend stdin et le copie dans stdout et le rediffuse. Tout comme au joint pour tuyaux.
Consultez le tee-shirt de la page de manuel (1) pour plus de détails.
la source
program.exe
etarthur.txt
.cat arthur.txt | tee >( program.exe )