Возможно ли с помощью Curses печатать в STDERR вместо STDOUT? - PullRequest
0 голосов
/ 20 марта 2012

Как я могу напечатать "Hello, World! \ N" (используя Curses ) до STDERR вместо STDOUT?

#!/usr/bin/env perl
use warnings;
use 5.12.0;
use Curses;

initscr();

addstr( 10, 0, "Hello, World!\n" );
refresh();

sleep 3;
endwin();

1 Ответ

1 голос
/ 20 марта 2012

Никогда не использовав проклятия, но предполагая, что это будет аргументом initscr, я сделал man initscr, который дал:

Программа, которая выводит на несколько терминалов, должна использовать newtermрутина для каждого терминала вместо initscr.[...]

Итак, вы получите что-то вроде:

#!/usr/bin/env perl
use strict;
use warnings;
use Curses;

open(my $stderr_term_in, '<', '/dev/null') or die $!;

my $stdout_scr = newterm($ENV{TERM}, \*STDOUT, \*STDIN);
my $stderr_scr = newterm($ENV{TERM}, \*STDERR, $stderr_term_in);

set_term($stdout_scr);
addstr(10, 0, "Hello, STDOUT!\n");
refresh();

set_term($stderr_scr);
addstr(10, 0, "Hello, STDERR!\n");
refresh();

set_term($stdout_scr);
endwin();
delscreen($stdout_scr);

set_term($stderr_scr);
endwin();
delscreen($stderr_scr);
...