b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

使用 Perl 脚本实现交互式命令行程序的管理与测试自动化(3)

电脑杂谈  发布时间:2019-08-06 09:01:52  来源:网络整理

new;构造方法

清单 20. new 方法原型

				
 $obj = Expect::Simple->new( /%attr ); 

创建 Expect::Simple 对象的同时启动目标程序,需传递关联数组 %attr 的引用作为参数。通过该关联数组设置目标程序的相关信息 ( 如命令、超时、提示符等 ),因此该数组必须包含 Prompt,DisconnectCmd,Cmd 等键值。

Cmd 键指定目标程序及其参数。它的值可以是标量或者是数组引用:Cmd => $command或Cmd => [ $command, $arg1, $arg2, ...]。在 Expect::Simple 的实现中 $command 或$command, $arg1, $arg2, ...都被直接传给 Expect 的 spawn 方法,因此前面对 spawn 方法的分析在这里同样适用:可以把完整的命令行写入 $command;对不含 shell 元字符的简单命令,也可以使用分拆形式,传递数组引用。

首先,这是一个php正则表达式,第一个参数是号的正则表达式,第二个是你的字符串,如果匹配成功将返回真,第三个参数将匹配到的身份照赋值给$arr,他是个数组格式,$arr[0]就是你完整匹配到的号。正则表达式后面的全局标记 g 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。本模块涉及的内容包括字符串创建,正则表达式隐式创建对象,创建正则表达式,进行replace方法的使用匹配。

3.7输入“exit”命令并按下“回车”键退出diskpart模式,之后,再次“exit”命令并按下“回车”键退出退出cmd命令行模式:。g.输入“exit”命令并按下“回车”键退出diskpart模式,之后,再次“exit”命令并按下“回车”键退出退出cmd命令行模式。7. 输入“exit”命令并按下“回车”键退出diskpart模式,之后,再次“exit”命令并按下“回车”键退出,退出cmd命令行模式。

Timeout 键设定超时 ( 缺省值为 1000 秒 ),如果目标程序在设定时间内未响应则返回。Expect::Simple 在目标程序启动之前设置超时且使用全局设定,因此无法区分处理目标程序执行过程中立即响应部分和有明显延时的部分。在设定超时值时需要考虑响应最慢的阶段。

RawPty 键用于设置终端,对应于 Expect 模块的 raw_pty 方法,默认值为 0。

Verbose 键用于设定输出内容的详细程度:Verbose => 3。

send:顺序发送数据

使用$obj->send( $cmd | @cmds)向目标程序发送一条或依次发送多条数据。每条数据送达后等待下一个输入提示以发送下一条数据。以 ssh 自动登录为例,serialsend.pl 演示如何顺序发送多条数据:

清单 21. serialsend.pl

				
 #! /usr/bin/perl 
 use Expect::Simple; 
 my %attr = ( 
        Prompt          => [ -re => qr/password:/s*$/i, 
                             -re => qr/[/]/$/>/#]/s*$/ ], 
        Cmd             => 'ssh root@9.125.13.44', 
        DisconnectCmd   => 'exit', 
        Verbose         => 3, 
        Timeout         => 10, 
 ); 
 my $obj = Expect::Simple->new( /%attr ); 
 # 自动输入密码,执行 ls 命令,退出。由于已设定退出命令,此处不必再发送 exit 
 $obj->send( "zhu88jie", "ls" ); 

输出结果:

清单 21. serialsend.pl 执行结果

perl命令行应用程序详_perl按行读取文件_perl程序

				
 Running command...done. 
 Sending `zhu88jie'
 Sending `ls'
 Disconnecting. 

若想看到 ls 命令的执行输出,只需将 Verbose 值设为 4。

before,after,match_str,error:查看匹配信息

详细描述了出版物模块(pubication module)和scorm内容包模块(scorm content package module)的内容结构、编码方式、更改方法以及构建方法和示例。servlet工作原理:首先简单解释一下servlet接收和响应客户请求的过程,首先客户发送一个请求,servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doget,dopost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。看过官方文档就知道backbone的model模块提供的fetch, save, destroy方法,和collection模块的fetch方法,都会发送异步请求,与后端服务进行交互。

expect_handle:使用内部对象

Expect::Simple 封装了 Expect 模块的细节,提供简单易用的接口,但是当 Expect::Simple 提供的功能无法以满足需求时,还可以使用这个方法直接操作内部 Expect 对象。

应用示例

Expect 模块使用示例

本例 (ftpdemo.pl) 演示如何使用 Expect 模块从 ftp 上自动下载文件。

清单 22. ftpdemo.pl

				
 #!/usr/bin/perl 
 # Usage: ftpdemo.pl [-u username] [-p password] host file1 [file2 file3 ...] 
 use Expect; 
 use Getopt::Std; 
 # 设置缺省用户名和密码
 my %opts = ( u=>'anonymous', p=>'anonymous@mycompany.com' ); 
 # 解析 -u 和 -p 选项
 getopt( 'up', /%opts ); 
 $host = shift @ARGV;            # 下一个参数是 ftp 服务器地址
 @files = @ARGV;                 # 余下的参数为需要下载的文件
 # 启动 ftp 进程
 print "Starting ftp session with server $host .../n"; 
 $ftp = Expect->spawn( "ftp $host" ) or die "Couldn't spawn ftp, $!"; 
 # 屏蔽多余输出
 $ftp->log_stdout( 0 ); 
 # 等待用户名输入提示
 unless ( $ftp->expect(30, -re=>qr/name /(.*?/):/s*$/i) ) { 
  die "Never got username prompt on $host, ".$ftp->error( )."/n"; 
 } 
 # 发送用户名数据
 print "Sending username ($opts{u}) ... /n"; 
 $ftp->send( "$opts{u}/r" ); 
 # 等待密码输入提示
 unless ( $ftp->expect( 30, -re=>qr/password:/s*$/i ) ) { 
  die "Never got password prompt on $hostname, ".$ftp->error( )."/n"; 
 } 
 # 发送密码
 print "Sending password ( $opts{p} ) ... /n"; 
 $ftp->send( "$opts{p}/r" ); 
 # 等待 ftp 命令行提示
 unless ( $ftp->expect(30,"ftp>") ) { 
  die "Never got ftp prompt after sending username, ".$ftp->error( )."/n"; 
 } 
 # 下载文件
 foreach my $file ( @files ) { 
  print "Getting the $file ... /n"; 
  $ftp->send( "get $file/r" ); 
  unless ( $ftp->expect( 30,"ftp> " ) ) { 
    die "Never got ftp prompt after attempting to get $file, ".$ftp->error( )."/n"; 
  } 
 } 
 # 断开 ftp 连接
 print "Download finished. Disconnecting ... /n"; 
 $ftp->send( "bye/r" ); 
 $ftp->soft_close( ); 
 print "Done./n"; 

一、如果在运行某软件或编译程序时提示缺少、找不到devlib.dll等类似提示,您可将从脚本之家下载来的devlib.dll拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用。一、如果在运行某软件或编译程序时提示缺少、找不到dforrt.dll等类似提示,您可将从脚本之家下载来的dforrt.dll拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用。一、如果在运行某软件或编译程序时提示缺少、找不到dformd.dll等类似提示,您可将从脚本之家下载来的dformd.dll拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用。

清单 23. ftpdemo.pl 执行结果

				
 # ./ftpdemo.pl -u root -p zhu88jie 9.125.13.44 diskusage.log 
 Starting ftp session with server 9.125.13.44 ... 
 Sending username (root) ... 
 Sending password (zhu88jie) ... 
 Getting the diskusage.log ... 
 Download finished. Disconnecting ... 
 Done. 
 # 

Expect::Simple 模块使用示例

我有一个比较ws的方法perl命令行应用程序详,那就是先写一个程序,可以读取脚本和加载dll,然后给脚本自定义一些command和参数,比如一行一个command, 程序的工作就是读取脚本里面的command,根据command去调用对应的api。txtfilename=true”,当记事本运行中时,可以激活记事本窗口,这个条件运行结果为“true”,定时存盘循环一直执行,退出记事本后,脚本无法激活记事本窗口,就会跳出循环,执行“wend”后面的“wscript.quit”退出脚本。现在碰到一个情况:我qtp的参数化是通过读取datatable(就是那个execel表)里面的数据来实现的,每一次跑一遍脚本,就要修改数据表里面很多列的数据(我测试的那个程序不能输入重复的数据),我想能不能通过程序,来控制那个数据表里面的每一列的数据,再开始跑脚本之前实现动态对数据的增加修改,比如说:我第一次跑脚本用的是原来已经在数据表里面设定好的数据,第二次跑的之前,先把数据表里面的每一列数据+b 列如:原来某一列第一行的值为aa,我第二次跑脚本之前让它变成aab,可以采用下面的方法:。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-118246-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...