Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用perl实现GUI自动化的工具_Perl - Fatal编程技术网

使用perl实现GUI自动化的工具

使用perl实现GUI自动化的工具,perl,Perl,我正在尝试使用Perl脚本自动化Metaware调试器工具。还有一些命令行选项可以运行该工具。但是,在调用该工具并设置源路径和目标路径后,我的脚本将失去对该工具的控制 是否有任何模块或方法可以通过Perl实现整个工具控制?在Linux上,您可以使用CPAN的Expect Perl模块,该模块专门用于控制命令行应用程序。这个CPAN模块模仿了著名的Expect程序,该程序是作为Tcl的扩展编写的,用于控制命令行应用程序 假设您的路径上有可用的perl install和“cpan”命令,请使用此

我正在尝试使用Perl脚本自动化Metaware调试器工具。还有一些命令行选项可以运行该工具。但是,在调用该工具并设置源路径和目标路径后,我的脚本将失去对该工具的控制


是否有任何模块或方法可以通过Perl实现整个工具控制?

在Linux上,您可以使用CPAN的Expect Perl模块,该模块专门用于控制命令行应用程序。这个CPAN模块模仿了著名的Expect程序,该程序是作为Tcl的扩展编写的,用于控制命令行应用程序

假设您的路径上有可用的perl install和“cpan”命令,请使用此shell命令(在bash中)安装Expect包和依赖项:

$cpan安装预期

更新:

大多数人(包括我自己)将无法访问专有的Metware调试器来测试/演示对特定工具的控制

幸运的是,大多数命令行调试器在与终端会话交互的方式上非常相似,因此希望使用perl Expect模块控制
gdb
调试器的演示能够相当容易地转换到您的环境中

下面是一个perl脚本示例,它使用CPAN Expect模块控制简单C程序的gdb调试会话:

#!/bin/env perl

use Expect;

my @params = ("./x");
my $default_timeout = 3;

my $exp = new Expect;
$exp->raw_pty(1);
my $exp = Expect->spawn("gdb", @params)
  or die "Cannot spawn $command: $!\n";

$exp->slave->stty(qw(raw));

# Send commands to gdb session, wait for (gdb) prompt before each ->send
$exp->send("set args 4\n");
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("b main\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("r\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("n\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("p a\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("c\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("quit\n"); }]);
$exp->expect($default_timeout, [ qr/\n/, sub { }]);
$exp->soft_close();
0;
下面是C程序文件
x.C
,在运行perl脚本控制gdb会话之前,您应该使用
gcc-g-o x.C
对其进行编译

#include <stdio.h>

int main(int argc, char *argv[]) {
    int a = (argc > 1) ? atoi(argv[1]) : 13;
    printf("a = %d\n", a);
    return 0;
}
#包括
int main(int argc,char*argv[]){
inta=(argc>1)?atoi(argv[1]):13;
printf(“a=%d\n”,a);
返回0;
}

请注意,在编译x.c文件之前,如果您的系统上还没有gcc和gdb,则需要首先使用yum来安装它们。

我正在Linux环境中运行它。红帽Linux。我也考虑过expect,但无法继续。我还认为我应该尝试使用特定于工具的命令行选项。我真的很感谢你,任何进一步的帮助都是非常感谢的!!!