我想使用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框架,用于处理异步多进程内容,例如POEAnyEvent等。他们会为您处理所有这些详细信息。

10-06 12:47