向Linux进程的STDIN发送击键

时间:2013-03-19 13:29:28

标签: perl stdin keystrokes

我有一个发布实时市场数据费率的应用程序。此应用程序从命令行调用,并具有交互模式,用户可以通过简单地键入参数后跟其相应的值来即时更改各种参数。

e.g。你2000年

会动态将更新速率设置为每秒2000次更新。

我需要做的是进行几个小时/天的浸泡测试,我需要能够随机将更新速率更改为不同的值。我通常使用Perl来编写所有脚本,所以我需要一种调用脚本的方法(很简单),但后来可以让脚本随机更改任何给定的参数(比如更新速率)。

任何想法或建议都会非常感激。

非常感谢

2 个答案:

答案 0 :(得分:1)

您可以使用open my $fh, "|-", ...打开程序管道,然后使用

将句柄设置为autoflush
select $fh;
$| = 1;

现在您可以直接连接被测系统的标准输入,如下面的演示所示。

#! /usr/bin/env perl

use strict;
use warnings;
no warnings "exec";

my @system_under_test = ("cat");

open my $fh, "|-", @system_under_test or die "$0: open @system_under_test: $!";

select $fh;
$| = 1;  # autoflush

for (map int rand 2000, 1 .. 10) {
  print $fh "ur $_\n";
  sleep int rand 10;
}

close $fh or warn "$0: close: $!";

对于你的浸泡测试,你当然希望睡眠更多的时间间隔并重复循环次数。

答案 1 :(得分:0)

您可以使用命令“mkfifo”。这会创建一个命名管道。如果你使用fifo作为输入启动你的程序它应该工作。

创建一个fifo:

mkfifo MyFifo

使用fifo作为输入启动您的应用程序:

./yourAppName < MyFifo

现在你所有写的(例如使用echo)到“MyFifo”都会转发到你的AppName的标准输入。