Identifica quando o script python está esperando por uma entrada manual

1

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 a tecla Enter para o script. Em vez disso, quero passar o manual enter do script shell em execução.

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

    
por ruchi 23.06.2014 / 08:32

1 resposta

2

Se houver apenas uma entrada obrigatória, use apenas echo e um canal:

echo | python script.py

echo imprime uma linha vazia (com nova linha) na saída padrão e, em seguida, redireciona isso para a entrada do script Python using | . Quando o Python lê a partir da entrada padrão, ela recebe uma linha vazia e continua.

Se o script quiser mais de um clique, você pode usar o yes command e um pipe :

yes "" | python script.py

O comando yes imprime a mesma linha para a saída padrão repetidamente. Por padrão, a string é y , mas aqui nós a transformamos em uma string vazia, então são apenas novas linhas para sempre.

Se a inserção for necessária como resposta a um prompt específico, e em outros momentos você precisar de informações diferentes, use expect , 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 não o recomendo especialmente. Se você quiser fazer isso, consulte Redirecionamento de E / S no Guia de script avançado de bash : você precisará clonar descritores de arquivo para fazer isso. Você também pode usar mkfifo e criar arquivos de pipe nomeados, ler e gravar neles 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 não é feito para isso e será muito mais simples escrever seu script em digamos, o próprio Python.

    
por 23.06.2014 / 08:40