Keyboard

過濾鍵盤輸入

  • November 4, 2012

我有一個程序可以從鍵盤輸入並呈現出漂亮的視覺化效果。該程序的目的是讓我的嬰兒可以在鍵盤上搗碎並讓電腦做一些事情。

但是,我想編寫一個與主程序脫節的鍵盤輸入清理程序。從概念上講,我希望該程序具有以下功能:

 sanitize_keyboard_input | my_program

Wheremy_program認為它正在從鍵盤獲取輸入,但實際上是從sanitize_keyboard_input. 有沒有辦法做到這一點?如果有幫助,我正在執行 Ubuntu linux。

我很久以前寫過這個。它是一個位於使用者輸入和互動式程序之間的腳本,允許截取輸入。在執行問很多問題的舊 Fortran 程序時,我用它逃到 shell 以檢查文件名。您可以輕鬆地對其進行修改以攔截特定輸入並對其進行清理。

#!/usr/bin/perl

# shwrap.pl - Wrap any process for convenient escape to the shell.

use strict;
use warnings;

# Provide the executable to wrap as an argument
my $executable = shift;

my @escape_chars = ('#');             # Escape to shell with these chars
my $exit = 'bye';                     # Exit string for quick termination

open my $exe_fh, "|$executable @ARGV" or die "Cannot pipe to program $executable: $!";

# Set magic buffer autoflush on...
select((select($exe_fh), $| = 1)[0]);

# Accept input until the child process terminates or is terminated...
while ( 1 ) {
  chomp(my $input = <STDIN>);

  # End if we receive the special exit string...
  if ( $input =~ m/$exit/ ) {
     close $exe_fh;
     print "$0: Terminated child process...\n";
     exit;
  }

  foreach my $char ( @escape_chars ) {
     # Escape to the shell if the input starts with an escape character...
     if ( my ($command) = $input =~ m/^$char(.*)/ ) {
        system $command;
     }
     # Otherwise pass the input on to the executable...
     else {
        print $exe_fh "$input\n";
     }
  }
}

一個簡單的範例測試程序,您可以嘗試一下:

#!/usr/bin/perl

while (<>) {
  print "Got: $_";
}

引用自:https://unix.stackexchange.com/questions/53800