在程序运行时按下“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”时提供状态更新的主要内容,如果未能解决你的问题,请参考以下文章

屏幕关闭时识别音量按钮按下 Android

按下相同的控件时按下 segue,使我的应用程序崩溃

mac 系统的简单操作按键,就是它的操作 小技巧

当按下 Enter 时,Java 中的循环不会中断,当条件是 DataInputStream.isAvailable() == 0 并且应用程序使用 telnet 运行时

在点击按钮时按下导航控制器

iOS:如何检测使用 BT 键盘时按下的任何键