
Estou tendo problemas para enviar shutdown -h 0
para um lxc
contêiner Debian (ou seja, executar este comando no lxc) com o pexpect
módulo python (em um script python). Neste módulo o usuário pode "esperar" (= aguardar a saída do processo) uma determinada substring, entre outras EOF, o que me leva à questão para poder depurar ainda mais porque o EOF não é reconhecido na saída. Preciso saber o que posso "esperar" após o encerramento do processo para aguardar o término do processo. Não posso simplesmente esperar pelo processo porque o pexpect
módulo oculta funções sem bloqueio para isso.
O pexpect
módulo (verhttp://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expectpara detalhes) envolve a recepção de EOF na chamada de sistema de leitura em um tipo (duck) e o torna utilizável em pexpect.expect
(um encapsulamento de possível saída/feedback de um processo).
Fiquei me perguntando isso porque ls
se espera que alguns processos como sejam finalizados com EOF, ou seja, o pexpect
sentido de EOF (exemplo emhttp://pexpect.sourceforge.net/pexpect.html).
Responder1
Em vez de executar este shutdown -h 0
comando, sugiro executar halt
ou executar este comando no host, lxc-shutdown -n <name>
.
Responder2
EOF indica que nenhuma entrada adicional é esperada em um recurso que possivelmente fornece uma quantidade infinita de dados (por exemplo, um fluxo). Esta situação é frequentemente expressa escrevendo um único caractere no fluxo (a ser definido pelo sistema subjacente (provavelmente um sistema operacional ou ambiente de tempo de execução)).
Como os processos utilizam fluxos para comunicação entre processos, eles precisam indicar os limites de sua saída e os processos de envio precisam indicar os limites de sua entrada usando EOF. O sistema subjacente irá certamente encaminhar esta entrada e saída para os seus próprios mecanismos de tratamento de processos, disponibilizando o EOF para avaliação no programa/no sistema.
Nota sobre pexpect
o caso de uso na pergunta: shutil.pexpect
não parece adequado para copiar arquivos de um lxc
contêiner. Ele travou e o deslocamento de tempo da pexpect
saída causa confusão.