将输入从文件重定向到命令行程序

将输入从文件重定向到命令行程序

我有一个命令行程序,通常在程序运行后从键盘获取其参数。如下所示:

Enter parameter 1? 3
Enter parameter 2? 2.6
Calculate something y/n? y

无法重写程序来获取命令行参数。

我想用类似以下的批处理文件来计时执行该程序需要多长时间:

@echo %time%
program.exe < params.txt
@echo %time%

问题是由于某种原因,最终参数没有被接受。

注意,最后一个参数是 ay/n,我在最后添加了一个空行,所以 y/n 后面有一个换行符。

输入文件params.txt

3
2.6
y
*empty line*   

答案1

您可以使用以下方式自动化交互式命令行程序expect

以下是维基百科文章中的一个例子(用于 telnet)

# Assume $remote_server, $my_user_id, $my_password, and $my_command were read in earlier 
# in the script.
# Open a telnet session to a remote server, and wait for a username prompt.
spawn telnet $remote_server
expect "username:"
# Send the username, and then wait for a password prompt.
send "$my_user_id\r"
expect "password:"
# Send the password, and then wait for a shell prompt.
send "$my_password\r"
expect "%"
# Send the prebuilt command, and then wait for another shell prompt.
send "$my_command\r"
expect "%"
# Capture the results of the command into a variable. This can be displayed, or written to disk.
set results $expect_out(buffer)
# Exit the telnet session, and wait for a special end-of-file character.
send "exit\r"
expect eof

很明显,您可以将这种方法用于您的程序,因为您知道提示字符串并且知道要给它提供什么响应。

相关内容