gpt4 book ai didi

perl - 在进程运行时从键盘读取一个键

转载 作者:行者123 更新时间:2023-12-01 06:49:01 25 4
gpt4 key购买 nike

我用 wget 在 Linux-Gnu 中用 Perl 写了一个简单的脚本来管理下载时间(开始和完成)。没有问题,一切正常,除了我希望我可以在进程运行时从键盘读取一个键
我在屏幕上显示了一个我不想停止的简单运动动画,然后读取键。

例如像 mplayermpv ,当你在命令行运行它时,你可以按 q 退出或 s 从屏幕上拍照。

部分脚本:

do {
system( "clear" );
($h, $m, $s) = k5mt::second_to_clock( $till_shutdown );

set_screen();
set_screen( 24 );

set_screen();
say "download was started ...";

set_screen();
set_screen( 24 );

set_screen();
printf "till finish: %02d %02d %02d\n", $h, $m, $s;

set_screen();
set_screen( 24 );

set_screen();
say "wget pid: [$wget_pid]";

set_screen();
set_screen( 24 );

set_screen();
$waiting_temp .= $animation[ $counter_animation++ ];
say $waiting_temp;
if( length( $waiting ) == $counter_animation ){
$waiting_temp = "";
$counter_animation = 0;
}

set_screen();
set_screen( 24 );

sleep 1;
$till_shutdown--;

} while( $till_shutdown );

enter image description here

单词 waiting till finish..... 连续显示(没有中断),我想读取像 q 这样的键退出程序。

更新

我正在寻找一个包含尽可能多选项的解决方案,如果我只想退出程序,我只需告诉用户按 Ctrl + C

在 Perl 中编写脚本是否可行?或不?如果是,如何?

NOTE: if it is possible without any modules please say the solution without any module, and if not, okay no problem

但是,非常感谢。

最佳答案

假设您的程序有一个中央循环,或者如果您可以简单地将键盘检查纳入处理过程,那么您最好使用 Term::ReadKey而不是试图适应 fork 并处理必要的进程间通信

调用 ReadKey(-1) 将进行非阻塞读取,如果按下某个键,它将返回单个字符,否则返回 undef。 (您可以提供第二个参数,即要使用的 IO channel ,但它将默认为 STDIN。)

我建议你运行这个例子。我使用 sleep 1 作为循环处理的虚拟对象

use strict;
use warnings 'all';
use feature 'say';

use Term::ReadKey;

my $n;

while () {

my $key = ReadKey(-1);

say "key $key entered" if defined $key;

sleep 1;

say ++$n;
}

关于perl - 在进程运行时从键盘读取一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com