Você precisa enviar o programa inteiro de uma só vez.
Quando você chamar run python < p1
, o shell está aguardando entrada antes de invocar o python. Isto é, o python nem sequer começa a executar em tudo até que todo o fluxo de dados tenha sido lido pelo shell e então seja passado inteiramente para python
.
Mesmo executando python -u p1
(ou seja, sem buffer e lido do arquivo p1
) python
tentará ler o arquivo inteiro antes de executar qualquer um deles.
Experimente esta experiência.
Terminal 1:
mkfifo p1
python < p1
Terminal 2:
cat > p1
print "Hello World"
print "Hello World"
Você verá que pode enviar várias linhas, mas o python no Termo 1 não faz nada. Agora pressione ctrl + D . Todo o programa é executado de uma vez.
Então, para resumir, se você quiser que python leia de um pipe, você precisa enviar o programa inteiro. Você não pode usar python interativamente dessa maneira.