Pergunta

Eu tenho um programa POE Perl bifurcação crianças.

As crianças se bifurcar logging fazer e telnets interativos para dispositivos remotos. POE usa STDOUT para retornar saída até o processo pai, mas por algum motivo ele está se perder (não ir para a tela ou para quaisquer arquivos).

Eu estou teorizando que isso é porque STDOUT está sendo redirecionada a algum lugar -. Eu preciso para determinar onde

Eu tenho usado (-t STDOUT) para identificar que o STDOUT da criança não é um TTY.

Eu também redefinir o STDOUT da criança a ser a do pai antes que a criança foi chamado -. Mas este método parece evitar manipuladores de eventos de Poe e ele simplesmente descarta a saída para os pais STDOUT

Q) Como faço para identificar o que os pontos STDOUT atuais em que eu possa descobrir onde meus dados vai

Graças

Simon

Foi útil?

Solução 3

Este foi até o POE :: Filtro :: Referência StdOut Handler estar de saída enviados pelo processo filho que não estava no formato que ele estava esperando.

Removido o filtro -. Poderia, então, ver o que estava sendo enviado e isso permitiu-me corrigir o problema

A questão foi o processo filho foi vomitando o conteúdo de seus subprocessos StdOut volta ao longo da conexão de soquete ao StdOut Handler.

Simon

Outras dicas

Será que fileno ajuda nesta situação? Se uma criança é fechar e reabrir STDOUT, então fileno(STDOUT) teria um valor diferente na criança do que no pai.

$ perldoc -f fileno
   fileno FILEHANDLE
           Returns the file descriptor for a filehandle, or undefined if
           the filehandle is not open.  This is mainly useful for
           constructing bitmaps for "select" and low-level POSIX tty-
           handling operations.  If FILEHANDLE is an expression, the value
           is taken as an indirect filehandle, generally its name.

           You can use this to find out whether two handles refer to the
           same underlying descriptor:

               if (fileno(THIS) == fileno(THAT)) {
                   print "THIS and THAT are dups\n";
               }

           (Filehandles connected to memory objects via new features of
           "open" may return undefined even though they are open.)

Se os seus filhos bifurcados são programas Perl também pode "selecionar STDOUT" e set $ | para marcá-lo direito sem buffer antes de qualquer exploração madeireira acontece.

Tem certeza de que esta não é uma questão de buffer? Eu não estou familiarizado com POE então eu não sei como você iria investigar ou corrigir isso, mas eu suspeito que vale a pena verificar, pelo menos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top