假设我有一个简单的 C 程序,可以将 2 个数字相加:
#include <stdio.h>
int main(void) {
int a, b;
printf("Enter a: "); scanf("%d", &a);
printf("Enter b: "); scanf("%d", &b);
printf("a + b = %d\n", a + b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我没有在每次执行时都输入终端,而是将a和的值输入b到一个文件中:
// input.txt
10
20
Run Code Online (Sandbox Code Playgroud)
然后我重定向stdin到这个文件:
./a.out < input.txt
Run Code Online (Sandbox Code Playgroud)
该程序可以运行,但其输出有点混乱:
Enter a: Enter b: a + b = 30
Run Code Online (Sandbox Code Playgroud)
有没有办法将 stdin 重定向到 stdout 以便输出看起来好像用户手动输入了值,即:
Enter a: 10
Enter b: 20
a + b = 30
Run Code Online (Sandbox Code Playgroud)
您可以为此使用期望。Expect 是一种用于自动化交互式命令行程序的工具。以下是如何自动输入这些值的方法:
#!/usr/bin/expect
set timeout 20
spawn "./a.out"
expect "Enter a: " { send "10\r" }
expect "Enter b: " { send "20\r" }
interact
Run Code Online (Sandbox Code Playgroud)
这会产生如下输出:
$ ./expect
spawn ./test
Enter a: 10
Enter b: 20
a + b = 30
Run Code Online (Sandbox Code Playgroud)
还有更多的例子在这里。