Expect Scripting (from http://www.gnulamp.com/expect.html)


Expect automates interaction and obviates the need for human effort in regression testing and conformance testing. With Expect skills, you can develop automated test suites to assure reliability and consistency with earlier software versions, or conformance with standards such as POSIX.


Get Started...
The three commands
send, expect, and spawn
are the building power of Expect. The send command sends strings to a process, the expect command waits for strings from a process, and the spawn command starts a process.

The send Command
The send command takes a string as an argument and sends it to a process. For example:

send "hello world"

This sends the string "hello world" (without the quotes). If Expect is already interacting with a program, the string will be sent to that program. But initially, send will send to the standard output. Here is what happens when I type this to the Expect interpreter interactively:
% expect 
expect1.1>send "hello world"
hello worldexpect1.2>exit
%

The send command does not format the string in any way, so after it is
printed the next Expect prompt gets appended to it without any space.
To make the prompt appear on a different line, put a newline character
at the end of the string. A newline is represented by "n". The exit
command gets you out of the Expect interpreter.

expect1.1>send "hello worldn"
hello world
expect1.2>exit
%


If these commands are stored in a file, speak, the script can be executed from the UNIX command line:


% expect speak
hello world

To execute the file as just "speak" rather than "expect
speak", insert the line "#!./expect -f" and do "chmod +x speak" . The
name of the interpreter must appear after the characters #! in the
first line. The ./expect is the path where Expect is to be found; in
this case, it is in the current working directory.


% cat speak
#!./expect -f
send "hello worldn"
%
% chmod +x speak
% speak
hello world


The expect Command

The expect command waits for a response, usually from a process.
expect can wait for a specific string or any string that matches a
given pattern. Like send, the expect command initially waits for
characters from the keyboard. To see how see how the expect command
works, create a a file response.exp that reads:


#!./expect -f
expect "hin"
send "hello there!n"


When I make response.exp executable and run it, the interaction looks like this:

% chmod +x response.exp
% response.exp
hi
hello there!

If you get an error that goes like couldn't read file " ": No
such file or directory, it may be because there are non-printable
characters in your file. This is true if you do cut-and-paste from
Netscape to your file. To solve this problem, try deleting trailing
spaces at the end of each command line (even if there seems to be
nothing there) in the script and follow the above steps again.



What Happens When Input Does Not Match

If expect
reads characters that do not match the expected string, it continues
waiting for more characters. If I had type hello instead of hi followed
by a return, expect would continue to wait for "hin". Finding
unexpected data in the input does not bother expect. It keeps looking
until it finds something that matches. If no input is given, expect
command eventually times out and returns. By default, after 10 seconds
expect gives up waiting for input that matches the pattern. This
default value can be changed by setting the variable timeout using the
Tcl set command. For example, the following command sets the timeout to
60 seconds.



set timeout 60



A timeout of -1 signifies that expect should wait forever and a timeout of 0 indicates that expect should not wait at all.



Anchoring

To prevent expect from matching
unexpected data, expect patterns can include regular expressions. The
caret ^ is a special character that only matches the beginning of the
input; it cannot skip over characters to find a valid match. For
example, the pather ^hi matches if I enter "hiccup" but not if I enter
"sushi" . The dollar sign ($) is another special character. It matches
the end of the data. The pattern hi$ matches if I enter "sushi" but not
if I enter "hiccup". And the pattern ^hi$ matches neither "sushi" nor
"hiccup". It matches "hi" and nothing else.


Patterns that use ^ or $ are said to be anchored. When patterns are not
anchored, patterns match beginning at the earliest possible position in
the string. For more techniques on pattern matching, I suggest you buy
the the book, Exploring Expect as well as Tcl and The Tk Toolkit.



Pattern-Action Pairs

Expect also allows
association between a command and a pattern. The association is made by
listing the action (also known as command) immediately after the
pattern in the expect command itself. Here is an example of
pattern-action pairs:

expect "hi" { send "You said hin" }
"hello" { send "Hello yourselfn" }
"bye" { send "Good-bye cruel worldn" }


This command looks for "hi", "hello", and "bye". If any of the three
patterns are found, the action immediately following it gets executed.
If there is no match and the default timeout expires, expect stops
waiting and execution continues with the next command in the script.



The spawn Command

The spawn command starts another
program. The first argument of the spawn command is the name of a
program to start. The remaining arguments are passed to the program.
For example:



spawn ftp ftp.uu.net



This command spawns an ftp process and ftp.uu.net is the argument to the ftp process.


Putting It All Together


Now we're ready to use the three commands above to write a little script
to do some automations. Normally when I do anonymous ftp by hand from a shell, this is what I see:

% ftp ftp.uu.net
Connected to ftp.uu.net.
220 ftp.UU.NET FTP server (Version wu-2.4(3)
Fri Nov 25 16:08:40 EST 1994) ready.
Name (ftp.uu.net:dtly): anonymous
331 Guest login ok, send your complete e-mail
address as password.
Password:
230-
230- Welcome to the UUNET archive.
230- A service of UUNET Technologies Inc, Falls Church, Virginia
230- For information about UUNET, call +1 703 206 5600, or see the files
230-
230- Access is allowed all day. Local time is Wed Feb 28 13:59:46 1996.
230- Guest login ok, access restrictions apply.
ftp>

To partially automate this action so that you don't have to
supply an appropriate identification and then have control turn over to
you, create a file aftp.exp that looks like this:


#!./expect -f
spawn ftp $argv
expect "Name"
send "anonymousr"
expect "Password:"
send "dsdasdr"
interact

Notice that each send command in the script ends with r and
not n (r denotes a return character while n denotes a linefeed
character). Interact is an Expect command that turns control from the
script over to you. When this command is executed, Expect stops reading
commands from the script and instead begins reading from the keyboard.
 
基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)内容概要:本文档介绍了基于遗传算法的微电网调度模型,涵盖风能、太阳能、蓄电池和微型燃气轮机等多种能源形式,并通过Matlab代码实现系统优化调度。该模型旨在解决微电网中多能源协调运行的问题,优化能源分配,降低运行成本,提高可再生能源利用率,同时考虑系统稳定性与经济性。文中详细阐述了遗传算法在求解微电网多目标优化问题中的应用,包括编码方式、适应度函数设计、约束处理及算法流程,并提供了完整的仿真代码供复现与学习。此外,文档还列举了大量相关电力系统优化案例,如负荷预测、储能配置、潮流计算等,展示了广泛的应用背景和技术支撑。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能电网优化研究的工程技术人员。; 使用场景及目标:①学习遗传算法在微电网调度中的具体实现方法;②掌握多能源系统建模与优化调度的技术路线;③为科研项目、毕业设计或实际工程提供可复用的代码框架与算法参考; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注目标函数构建与约束条件处理,同时可参考文档中提供的其他优化案例进行拓展学习,以提升综合应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值