Keyboard
過濾鍵盤輸入
我有一個程序可以從鍵盤輸入並呈現出漂亮的視覺化效果。該程序的目的是讓我的嬰兒可以在鍵盤上搗碎並讓電腦做一些事情。
但是,我想編寫一個與主程序脫節的鍵盤輸入清理程序。從概念上講,我希望該程序具有以下功能:
sanitize_keyboard_input | my_program
Where
my_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: $_"; }