Redirecionando entrada de arquivo para programa de linha de comando

2

Eu tenho um programa de linha de comando que normalmente recebe seus parâmetros do teclado depois que o programa é executado. Algo parecido com isto:

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

Reescrever o programa para obter parâmetros de linha de comando não é possível.

Gostaria de tempo quanto tempo leva para executar o programa com um arquivo em lotes que é semelhante ao seguinte:

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

O problema é que, por algum motivo, o parâmetro final não é aceito.

Note que o parâmetro final é um y / n, e eu adicionei uma linha vazia no final para que haja uma nova linha depois do y / n.

O arquivo de entrada, params.txt :

3
2.6
y
*empty line*   
    
por dandan78 10.12.2011 / 20:20

1 resposta

1

Você pode automatizar programas de linha de comando interativos usando expect

Aqui está um exemplo (para telnet) do artigo da Wikipedia

# 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

Deve ficar claro que você pode usar essa abordagem para o seu programa, já que conhece as strings de prompt e sabe quais são as respostas para alimentá-lo.

    
por 10.12.2011 / 21:20