perl - 如何在 Perl 中找到进程 STDOUT 的当前值?

标签 perl stdout poe

我有一个 POE Perl 程序 fork 子项。

它所 fork 的子进程会进行日志记录和交互式远程登录到远程设备。 POE 使用 STDOUT 将输出返回到父进程,但由于某种原因它丢失了(不会显示到屏幕或任何文件)。

我推测这是因为 STDOUT 被重定向到某个地方 - 我需要确定在哪里。

我已使用 (-t STDOUT) 来识别子级的 STDOUT 不是 TTY。

在调用子级之前,我还将子级的 STDOUT 重置为父级的 STDOUT - 但此方法似乎避免了 POE 的事件处理程序,它只是将输出转储到父级 STDOUT。

问)如何识别当前 STDOUT 指向的内容,以便找到数据的去向

谢谢

西蒙

最佳答案

在这种情况下fileno会有帮助吗?如果子级正在关闭并重新打开 STDOUT,则 fileno(STDOUT) 在子级中的值将与父级中的值不同。

$ 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.)

关于perl - 如何在 Perl 中找到进程 STDOUT 的当前值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1690270/

相关文章:

c++ - Delphi - 从静态链接的 MSVC++ 编译的 DLL 捕获 stdout 和 stderr 输出

perl - 我该如何找出导致我的程序随着时间的推移消耗大量内存的原因?

mysql - 如何使用 Perl 根据 id 使用不同的值更新每个数据库记录?

perl - 为什么无法从 File::Spec 导入单个函数?

perl - IO::Socket:SSL 在套接字上打印时有时会添加换行符

javascript - 将 EXIF 数据写入图像流 Node.js

xml - 无法在 shell 脚本中集成 perl 脚本

python ,子进程: reading output from subprocess

perl - 如何理解POEM-To destroy的使用?

perl - 在退出之前终止 Perl 中的子进程的正确方法是什么?