我想使用xinput监视#次击键和#次鼠标移动按。为了简化起见,我想说的是以下两个命令:
xinput test 0
xinput test 1
同时写入屏幕。
我在像这样的Perl脚本中使用它:
open(my $fh, '-|', 'xinput test 0') or die $!;
while(my $line = <$fh>) {
...stuff to keep count instead of logging directly to file
}
编辑:
就像是:
open(my $fh, '-|', 'xinput test 0 & xinput test 1') or die $!;
不起作用。
最佳答案
我不确定您要如何处理输出,但是听起来您想同时运行命令。在那种情况下,我的第一个想法是将每个命令的Perl进程派生一次,然后对您关心的命令执行子进程。
foreach my $command ( @commands ) { # filter @commands for taint, etc
if( fork ) { ... } #parent
else { # child
exec $command or die "Could not exec [$command]! $!";
}
}
fork 的进程共享相同的标准文件句柄。如果在父进程中需要它们的数据,则必须在两者之间进行某种形式的通信。
CPAN上还有几个Perl框架,用于处理异步多进程内容,例如POE,AnyEvent等。他们会为您处理所有这些详细信息。