Come faccio a trovare il valore corrente di un processo STDOUT in Perl?
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
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.