Custom python REPL com fifos

1

É possível fazer um REPL personalizado (por exemplo, python) com dois fifos?

Explicação do problema

Suponha que eu tenha dois fifos in e out . Eu tenho três terminais.

  1. No primeiro, quero executar comandos que geram código python para in . Por exemplo %código%
  2. O segundo apenas executa echo "print(1+2)" > in echo "a = 3" > in echo "b = 4" > in // wait some time # usual comments break SO formatting echo "print(a*b)" > in . O resultado deve ser algo como %código%
  3. O terceiro deve ler cat out , executar as linhas em 3 // wait a little time <-- of course this is not real output 12 e imprimir o resultado em in , exatamente como em uma sessão comum em Python interativo.

Tentativa de solução / observações adicionais

  • Apenas executar python no terceiro terminal não funciona. Ele termina depois que a primeira linha é gravada em out , o segundo terminal só imprimirá o python in >out .
  • Escrever um wrapper que tenta executar linhas de in a 3 não funciona, porque preciso analisar linhas como in ou semelhantes.
  • Em suma, eu realmente quero o comportamento do REPL padrão do python, exceto que eu não quero estar sentado no teclado e colocar linhas, uma por uma. Eu quero ser capaz de mudar os canais de entrada e saída.
por jmc 03.10.2014 / 17:39

1 resposta

2

Você examinou o módulo código ? Você provavelmente deseja subclassificar code.InteractiveConsole e substituir seu método write para gravar em seu out FIFO e ter um loop externo que lê linhas do in FIFO e chama o método push com cada linha. / p>

Eu não testei isso, mas mesmo que não funcione exatamente como eu sugeri, sua solução, sem dúvida, fará uso do módulo code .

    
por 03.10.2014 / 20:17

Tags