gpt4 book ai didi

Expect Script - 从某一点开始记录,并在某一点停止

转载 作者:行者123 更新时间:2023-12-01 22:34:26 24 4
gpt4 key购买 nike

希望你一切都好!

我最近开始整理一个小工具供我们的一些网络工程师使用。它的功能是检索电路信息,然后以良好的格式解析和输出这些信息。当然,其中一部分涉及到所需框的 SSH 连接并运行命令以生成所需的输出。

这是我目前获得的脚本。它工作正常,运行所需的命令,发送一些空格以提示系统显示更多电路,然后通过退出完成。所有这些都被记录到一个文件中,该文件的名称与盒子的主机名相同。太好了。

然而,当我阅读生成的文件并看到它包含大量数据时,我的问题很明显,包括我运行的命令和连接时提供的不必要的统计信息。我只是在寻找在我发出命令时开始的日志记录,并在之后切断它。由于我不熟悉 expect,非常感谢任何指导。

附言。如果我做了任何愚蠢的事情,我深表歉意;我对这门语言本身还很陌生,而且那里的支持也不是很好。

谢谢。

set ip [lindex $argv 0]
set hostname [lindex $argv 1]
set timeout 10
set user ""
set password ""

# Spawning the ssh session
spawn ssh $ip -l $user

# Awaiting prompt for password
expect "$user@$ip's password:"
sleep 1;
# Awaiting prompt
send "$password\n"
sleep 2
log_file -noappend $hostname;
send "terminal length 0\n"
sleep 1
send "show int desc\n"
sleep 5
send "exit\n"
interact
exit

最佳答案

您可以通过将 log_file 放在您想要的位置来控制输出。

当你想开始记录时,你可以添加行作为(你已经在你的代码中)

log_file my_log_file.log

在执行这些命令后,控制台中打印的任何内容都将记录到名为 my_log_file.log 的文件中。默认情况下,如果文件已存在于该位置,则会附加该文件。如果您添加标志 -noappend,那么它将覆盖现有文件。

log_file -noappend fresh.log

如果你想停止日志记录,那么只需提供不带任何参数的 log_file

log_file

从这一点开始,生成的任何输出都不会被保存。

例如,您正在登录某个交换机并提供一些凭据并执行一些命令,如下所示,

spawn ssh some_ip
expect some_thing
#Login code here
log_file output.log; # Start logging
#some actions here
log_file; # stopping logging here.
# some more actions
# end

您多次发送空格。相反,您可以将终端长度设置为 0,如下所示,

send "term len 0"
expect "prompt"

这将避免多次发送的开销。此外,在您的情况下,空格将很快发送到交换机,因为没有什么可期待的。如果你仍然有兴趣在没有 'term len 0' 的情况下这样做,那么至少你可以将代码放在一个循环中,如下所示,

for { set i 0 } { $i < 10 } { incr i } { 
send " "
expect "something"
}

但是,这种做法是不可取的,因为有可能需要发送超过10个空格,那么这将失败。

关于Expect Script - 从某一点开始记录,并在某一点停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com