杰瑞科技汇

SecureCRT如何用Python实现暂停功能?

脚本执行过程中暂停,等待用户输入后继续

这是最直接的“暂停”需求,脚本执行到某一步,需要你手动确认或输入一些信息,然后继续执行。

SecureCRT如何用Python实现暂停功能?-图1
(图片来源网络,侵删)

方法 1:使用 input() 函数(推荐,最简单)

这是最简单、最 Pythonic 的方法。input() 函数会暂停脚本的执行,并在 SecureCRT 的脚本输出窗口中显示提示信息,等待用户输入一行文本并按回车。

示例代码:

# -*- coding: utf-8 -*-
# 获取当前活动的会话标签
crt.Screen.Synchronous = True  # 强制同步,确保输出稳定
# 发送一些命令
crt.Screen.Send("show version" + crt.CRLF)
crt.Screen.WaitForString("#", 5) # 等待提示符出现
# --- 暂停部分 ---
# 在脚本输出窗口显示 "Press Enter to continue..." 并等待用户按回车
crt.Dialog.MessageBox("脚本即将暂停,请按回车键继续。", "脚本暂停", 64) # 可选:弹出一个对话框
response = input("请按回车键继续,或输入 'q' 退出...")
if response.lower() == 'q':
    crt.Session.Disconnect()
    crt.Dialog.MessageBox("脚本已退出。", "信息", 64)
    # 脚本结束
else:
    # 用户按了回车,脚本继续执行
    crt.Screen.Send("show running-config" + crt.CRLF)
    crt.Screen.WaitForString("#", 10)
crt.Screen.Synchronous = False # 恢复异步模式

如何使用:

  1. 将上述代码保存为 .py 文件(pause_example.py)。
  2. 在 SecureCRT 中,通过 Script -> Run 选择并运行该脚本。
  3. 脚本执行到 input() 时,会暂停,SecureCRT 的脚本输出窗口会显示提示信息。
  4. 你输入文字并按回车后,脚本才会继续往下执行。

方法 2:使用 crt.Dialog.MessageBox

如果你只想暂停,并弹出一个简单的确认对话框,而不需要用户输入文本,MessageBox 是更好的选择,它会暂停脚本,直到用户点击“确定”或“取消”。

SecureCRT如何用Python实现暂停功能?-图2
(图片来源网络,侵删)

示例代码:

# -*- coding: utf-8 -*-
crt.Screen.Synchronous = True
crt.Screen.Send("show interface status" + crt.CRLF)
crt.Screen.WaitForString("#", 5)
# --- 暂停部分 ---
# 弹出一个对话框,脚本会一直等待,直到用户点击 "确定"
crt.Dialog.MessageBox("请检查上方的接口状态信息,然后点击“确定”继续。", "请确认", 64)
# 用户点击确定后,脚本继续
crt.Screen.Send("show interface description" + crt.CRLF)
crt.Screen.Synchronous = False

脚本暂停指定的时间

如果你的需求是让脚本“睡”一会儿,而不是等待用户输入,可以使用 Python 的 time 模块。

示例代码:

# -*- coding: utf-8 -*-
import time
crt.Screen.Synchronous = True
crt.Screen.Send("ping 8.8.8.8" + crt.CRLF)
crt.Screen.WaitForString("#", 10)
# --- 暂停部分 ---
# 让脚本暂停 10 秒
crt.Dialog.MessageBox("脚本将暂停 10 秒...", "等待中", 64)
time.sleep(10) # 暂停10秒
# 10秒后,脚本继续执行
crt.Screen.Send("traceroute 8.8.8.8" + crt.CRLF)
crt.Screen.Synchronous = False

在脚本循环中暂停,并等待某个条件

这是一个更高级的场景,你希望脚本每隔一段时间执行一次命令,但每次执行后都暂停一下,让你有时间检查结果,或者由你手动触发下一次执行。

SecureCRT如何用Python实现暂停功能?-图3
(图片来源网络,侵删)

示例代码:

# -*- coding: utf-8 -*-
# 获取当前会话
tab = crt.script_tab
screen = tab.Screen
# 让用户决定是否继续循环
while True:
    screen.Send("show clock" + crt.CRLF)
    screen.WaitForString("#", 5)
    # --- 暂停并等待用户确认 ---
    # 使用 input() 让用户决定是否继续
    user_input = input("命令已执行,按回车键再次执行,或输入 'exit' 退出脚本。")
    if user_input.lower() == 'exit':
        break # 退出 while 循环,脚本结束
crt.Dialog.MessageBox("脚本执行完毕。", "完成", 64)

重要注意事项

  1. 脚本输出窗口

    • 使用 input()crt.Dialog.MessageBox 时,SecureCRT 的 Scripting 窗口(通常在主界面下方)必须是活动窗口,否则你可能看不到提示或无法输入。
    • 你可以通过菜单 View -> Tabs -> Scripting 来确保这个窗口可见。
  2. crt.Screen.Synchronous

    • 在脚本中,特别是当脚本需要精确地等待某些输出时(WaitForString),将 crt.Screen.Synchronous 设置为 True 是一个好习惯,这可以防止脚本在终端设备还未完全输出完信息时就继续执行,导致逻辑错误。
    • 脚本执行完毕后,最好将其改回 False,以免影响你后续的手动操作。
  3. 调试

    • 如果脚本没有按预期暂停,请检查是否有语法错误。
    • 确保 input() 的提示信息能够正确显示在 Scripting 窗口中。
需求场景 推荐方法 说明
等待用户输入文本后继续 input("提示信息") 最常用,简单直接,在 Scripting 窗口交互。
仅等待用户点击确认 crt.Dialog.MessageBox("提示", "标题") 适合简单的确认操作,有弹窗提示。
让脚本休眠固定时间 import time; time.sleep(秒数) 适用于需要定时或延迟的场景。
在循环中等待用户触发 while True: + input() 适用于需要用户一步步控制脚本执行流程的情况。

对于绝大多数“暂停”需求,input() 函数 是最灵活、最简单的选择。

分享:
扫描分享到社交APP
上一篇
下一篇