【问题标题】:GetTerminalSize: How do I have to modify a handle to get a different output?GetTerminalSize:如何修改句柄以获得不同的输出?
【发布时间】:2023-04-02 15:41:01
【问题描述】:

在哪些情况下设置文件句柄会显式更改Term::ReadKey::GetTerminalSize 的结果?

use Term::ReadKey qw( GetTerminalSize );

open my $fh, '>', 'TEST.txt' or die $!;
select( $fh );

my ( $c, $d ) = GetTerminalSize( $fh );
my ( $j, $k ) = GetTerminalSize();

# both the same size:
say STDOUT "FILE: $c x $d";
say STDOUT "OUT:  $j x $k";

将 STDOUT 重定向到文件但大小仍然相同:

use Term::ReadKey qw( GetTerminalSize );

my ( $c, $d ) = GetTerminalSize( \*STDOUT );
my ( $j, $k ) = GetTerminalSize( \*STDERR );

# same size:
say STDERR "OUT: $c x $d";
say STDERR "ERR: $j x $k";

【问题讨论】:

    标签: perl terminal console size filehandle


    【解决方案1】:

    使用 Windows 时:

    在 Windows 下,必须使用“输出”文件句柄调用此函数, 例如 STDOUT,或打开到 CONOUT$ 的句柄。

    【讨论】:

      【解决方案2】:

      这毫无意义。

      首先,您为什么要请求非终端文件句柄的终端大小?常规文件没有大小。

      其次,单参数select() 只需为printsay 语句选择默认输出句柄,而没有给出文件句柄。这是一个过时的错误,不应该在现代代码中使用。

      【讨论】:

      • 是否存在使用STDERR 而不是STDOUT 调用的GetTerminalSize 会返回不同值的情况?
      • 当然;如果它们都附加到不同的文件句柄。最可能的情况是,如果 perl 程序在 STDOUT 重定向的情况下运行,但 STDERR 仍保留在实际控制终端上。
      • 我已经尝试过了,但没有发现任何区别。我添加了示例。
      猜你喜欢
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 2020-06-18
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多