【发布时间】:2015-02-11 23:04:59
【问题描述】:
#!/usr/bin/perl -w
use Term::ReadKey;
ReadMode('cbreak');
while (1) {
$char = ReadKey(-1);
next unless defined $char;
printf("Char: $char Decimal: %d\tHex: %x\n", ord($char), ord($char));
}
ReadMode('normal');
上面的效果很好。但是我希望能够在某些可执行文件运行时获得用户输入。所以我尝试了以下方法,但它不起作用。也许在尝试获取用户输入时运行可执行文件会搞砸?如果是这样,我该怎么做?
我从 $myexe 获取输出,根据用户输入,我想从 $myexe 过滤不同的东西
#!/usr/bin/perl -w
use Term::ReadKey;
my $myexe = 'bin/myexecutable';
open my $EXE,
"$myexe distribute 2>&1 |"
or die 'Cannot open EXE';
ReadMode('cbreak');
while (<$EXE>) {
$char = ReadKey(-1);
if (defined $char) {
print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> $char\n"; #i would press a key but nothin prints out
}
print "$_\n";
}
ReadMode('normal');
【问题讨论】:
-
bin/myexecutable distribute的输出是什么? -
@g.tsh 一堆字符串。例如,“建筑 ”
-
@g.tsh 是 bin/myexecutable 的输出,让我无法获得用户输入?
-
while (<$EXE>)被阻止。所以每次exe打印一行到STDOUT时都会执行循环(和ReadKey)。 -
@g.tsh 它每秒打印多行。高达每秒 100 行。所以 ReadKey 应该像 while (1) 循环一样工作
标签: perl