Identifique quando o script python está aguardando uma entrada manual

Identifique quando o script python está aguardando uma entrada manual

Estou escrevendo um script de shell que executa um script Python. O script Python é interrompido para que uma entrada manual seja fornecida. No entanto, não quero ter que pressionar Enter todas as vezes no script. Em vez disso, quero passar a entrada manual do script de shell em execução.

Por favor, ajude, se existe uma maneira de fazer isso?

Responder1

Se houver apenas uma entrada necessária, basta usar echoe um pipe:

echo | python script.py

echoimprime uma linha vazia (com nova linha) na saída padrão e então a redirecionamos para a entrada do script Pythonusando|. Quando o Python lê a entrada padrão, ele obtém uma linha vazia e continua.

Se o script desejar mais de um pressionamento de enter, você poderá usar oyescomandoe um cachimbo:

yes "" | python script.py

O yescomando imprime a mesma linha na saída padrão continuamente. Por padrão, a string é y, mas aqui a tornamos uma string vazia, então são apenas novas linhas para sempre.


Se a entrada for necessária como resposta a um prompt específico e em outros momentos você precisar de uma entrada diferente, useexpect, que é "uma extensão Tcl que permite automatizar interações com programas interativos".

É possível escrever seu script de shell para que ele leia a saída do Python e produza uma nova entrada para ele, mas eu não recomendo isso especialmente. Se você quiser fazer isso, vejaRedirecionamento IO no Guia avançado de script Bash: você precisará clonar descritores de arquivo para fazer isso. Você também pode usarmkfifoe crie arquivos de pipe nomeados e, em seguida, leia-os e grave-os normalmente.

Para ser honesto, eu começaria a pensar em abordagens alternativas se você estiver chegando ao ponto de fazer uma dessas abordagens: o shell script simplesmente não foi criado para isso e será muito mais simples escrever seu script, digamos, O próprio Python.

informação relacionada