Inicie o Repl / CLI nos comandos de fundo e feed

2

Digamos que a python repl demore muito para iniciar, existe uma maneira de iniciá-la em segundo plano para que eu possa criar um alias e alimentá-lo com comandos como python-current "command to run" .

    
por William 13.04.2013 / 21:15

2 respostas

1

Não há nada na distribuição python de fazer esse tipo de abertura, "baterias incluídas", não obstante.

Programas como os editores podem lidar com esse tipo de coisa, porque é bem claro o que fazer quando você abre outro arquivo: basta abrir uma janela / guia no novo arquivo, manipulado pelo mesmo executável.

Implementar algo assim não é tão difícil, mas você precisa pensar sobre o que acontece quando o primeiro comando ainda não terminou e o segundo está agendado:

  • anular o primeiro comando
  • enfileire o segundo comando
  • executam as coisas em paralelo (o que requer tempo de inicialização extra, a menos que você tenha vários encadeamentos aguardando o comando)

Eu notifiquei os pythons para carregar e executar módulos com base em arquivos em um diretório que foram verificados, solicitação http (em um sistema baseado em torção) e com zeromq. O que é apropriado depende IMHO o que mais é necessário para o sistema, eu sempre vou com o que funciona e tem menos sobrecarga. Seu python-current teria que fazer a interface apropriada.

Frequentemente isso foi combinado com o recarregamento de determinados módulos (para obter o processamento de novos comandos). Para isso você pode usar o reload() embutido:

import mycommand
# test for a command that requires reloading
reload(mycommand)

Como um aparte: especialmente ao usar o código da interface do usuário, descobri que esse recarregamento é útil. O carregamento do executável em Python é comparável ao Perl (0,002s no meu sistema de vários anos, time python -v ). Carregar os módulos base leva cerca de dez vezes mais tempo ( time python -c "exit();", 0.025s). But when using UI based programs the whole startup easily grows to several seconds and more. And in that case implementing dynamic command reading and having a python-current 'faz sentido.     
por 13.04.2013 / 22:12
1

Se você usa bash , pode tentar coprocessos . O Ksh também tem coprocessos , não tenho certeza se os dois shells têm função equivalente nessa área . Eu só tentei a versão do Ksh (meu empregador adora o klunk, então usamos o Ksh) e funcionou, mas não foi fácil ter mais do que um único co-processo.

Google para "exemplo de coprocess ksh" ou "bash coprocess example" e você encontrará um código de exemplo. Trabalhe com os exemplos, pois a coisa toda não é super intuitiva.

    
por 13.04.2013 / 22:02