2

У меня есть программа командной строки, которая обычно получает свои параметры с клавиатуры после запуска программы. Что-то вроде этого:

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 ответ1

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

Должно быть понятно, что вы можете использовать этот подход для своей программы, поскольку вы знаете строки подсказок и знаете, какие ответы нужно передать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .