在程序运行时按下“ENTER”时提供状态更新
Posted
技术标签:
【中文标题】在程序运行时按下“ENTER”时提供状态更新【英文标题】:Providing a status update when "ENTER" is pressed, while program is working 【发布时间】:2012-12-03 16:22:53 【问题描述】:我有一个 PERL 脚本,它循环并调用具有不同参数的二进制文件。我正在使用 IPC::Run。我想当用户按下诸如“ENTER”之类的键时,会显示一条状态消息,例如
“目前正在编写 28 个脚本中的 14 个(完成 50%)”
我的脚本如下:
foreach my $file (@files)
$file =~ s/$file_dir//;
#Run the test case, store the output in $stdout
run [ "php", "PROGRAM.phar", "$file" ], ">", \my $stdout;
print LOG_FILE "Return code $?\n";
print LOG_FILE "Output: $stdout");
基本上我将如何中断二进制文件以显示我的状态消息?
【问题讨论】:
如何在二进制文件运行时中断二进制文件以显示状态消息?对不起,如果我不清楚。 为什么不打印每次迭代的状态? 我可以这样做,但我更喜欢用户按一个键来显示更新的状态。类似于按 Enter 键强制“顶部”刷新。 你的意思是二进制文件有它的任务状态吗? 【参考方案1】:如果我更正 IPC::Run 的这种用法不是多线程的。它会一一执行命令,因为只有一个进程,所以无法打印消息。
喜欢:
use Parallel::ForkManager;
$pm = new Parallel::ForkManager($MAX_PROCESSES);
my $input;
foreach $data (@all_data)
# Forks and returns the pid for the child:
my $pid = $pm->start and next;
... do some work with $data in the child process ...
$pm->finish; # Terminates the child process
chomp($input= <STDIN>);
print "Some statistics\n" if $input =~ m!\n!;
问候,
【讨论】:
正是我想要的。谢谢以上是关于在程序运行时按下“ENTER”时提供状态更新的主要内容,如果未能解决你的问题,请参考以下文章
当按下 Enter 时,Java 中的循环不会中断,当条件是 DataInputStream.isAvailable() == 0 并且应用程序使用 telnet 运行时