
Digamos que o python
repl demore muito para iniciar. Existe uma maneira de iniciá-lo em segundo plano para que eu possa criar um alias e alimentá-lo com comandos como python-current "command to run"
.
Responder1
Não há nada na distribuição python que faça esse tipo de abertura, apesar das 'baterias incluídas'.
Que programas como editores podem lidar com esse tipo de coisa, é porque é bastante claro o que fazer quando você abre outro arquivo: basta abrir uma janela/aba no novo arquivo, manipulado pelo mesmo executável.
Implementar algo assim sozinho não é tão difícil, mas você tem que pensar no que acontece quando o primeiro comando ainda não terminou e o segundo está agendado:
- abortar o primeiro comando
- enfileirar o segundo comando
- execute coisas em paralelo (o que requer tempo extra de inicialização, a menos que você tenha vários threads aguardando comando)
Notifiquei pythons em execução para carregar e executar módulos com base em arquivos em um diretório que foi verificado, solicitação http (em um sistema baseado em twist) e com zeromq. O que é apropriado depende, IMHO, do que mais é necessário para o sistema, eu sempre escolho aquilo que funciona e tem menos sobrecarga. Você python-current
teria que fazer a interface adequada.
Freqüentemente, isso era combinado com o recarregamento de determinados módulos (para obter o processamento de novos comandos). Para isso você pode usar o reload()
integrado:
import mycommand
# test for a command that requires reloading
reload(mycommand)
Como um aparte: especialmente ao usar o código da UI, achei esta recarga útil. O carregamento do executável em Python é comparável ao Perl (0,002s em meu sistema antigo
time python -v
). Carregar os módulos básicos 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.
Responder2
Se você usar bash
você pode tentarcoprocessos. Ksh também temcoprocessos, não tenho certeza se ambos os shells têm funções equivalentes nesta área. Eu apenas tentei a versão Ksh (meu empregador adora klunk, então usamos Ksh) e funcionou, mas não foi fácil ter mais de um único coprocesso.
Procure no Google por "exemplo de coprocessamento ksh" ou "exemplo de coprocessamento bash" e você encontrará um código de exemplo. Trabalhe a partir dos exemplos, pois a coisa toda não é muito intuitiva.