Domanda

Ho un programma Perl POE biforcano bambini.

I bambini è sborsare fare la registrazione e telnets interattive in dispositivi remoti. POE utilizza STDOUT per tornare uscita posteriore fino al processo padre, ma per qualche motivo è perdersi (non andare a schermo o per qualsiasi file).

sto teorizzando che questo è perché STDOUT viene reindirizzato da qualche parte -. Ho bisogno di accertare dove

Ho usato (-t STDOUT) per identificare che lo STDOUT del bambino non è un TTY.

Ho anche ripristinare lo STDOUT del bambino ad essere quello del genitore prima che il bambino è stato chiamato -. Ma questo metodo sembra evitare i gestori di eventi di Poe e semplicemente Discariche l'uscita ai genitori STDOUT

D) Come faccio a individuare quali punti la corrente STDOUT in modo che io possa trovare dove miei dati sta andando

Grazie

Simon

È stato utile?

Soluzione 3

Questo è stato fino al POE :: :: Filtro Riferimento StdOut Handler inviato in uscita dal processo figlio che non era nel formato che si aspettava.

Rimosso il filtro - potrebbe poi vedere quello che era stato inviato e questo mi ha permesso di risolvere il problema

.

Il problema è stato il processo figlio è stato vomitando i contenuti dei suoi sottoprocessi stdout indietro lungo la connessione socket al StdOut Handler.

Simon

Altri suggerimenti

Sarebbe fileno aiuto in questa situazione? Se un bambino sta chiudendo e riaprendo STDOUT, quindi fileno(STDOUT) avrebbe un valore diverso nel bambino che nel genitore.

$ 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 i vostri figli sono biforcute programmi Perl troppo si può "scegliere STDOUT" e impostare $ | per marcare bene senza buffer prima di ogni registrazione accada.

Sei certo questo non è un problema di buffer? Non ho dimestichezza con il POE quindi non so come si sarebbe indagare o correggere, ma ho il sospetto che la pena di controllare, almeno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top