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

方法 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 # 恢复异步模式
如何使用:
- 将上述代码保存为
.py文件(pause_example.py)。 - 在 SecureCRT 中,通过
Script -> Run选择并运行该脚本。 - 脚本执行到
input()时,会暂停,SecureCRT 的脚本输出窗口会显示提示信息。 - 你输入文字并按回车后,脚本才会继续往下执行。
方法 2:使用 crt.Dialog.MessageBox
如果你只想暂停,并弹出一个简单的确认对话框,而不需要用户输入文本,MessageBox 是更好的选择,它会暂停脚本,直到用户点击“确定”或“取消”。

示例代码:
# -*- 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
在脚本循环中暂停,并等待某个条件
这是一个更高级的场景,你希望脚本每隔一段时间执行一次命令,但每次执行后都暂停一下,让你有时间检查结果,或者由你手动触发下一次执行。

示例代码:
# -*- 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)
重要注意事项
-
脚本输出窗口:
- 使用
input()或crt.Dialog.MessageBox时,SecureCRT 的 Scripting 窗口(通常在主界面下方)必须是活动窗口,否则你可能看不到提示或无法输入。 - 你可以通过菜单
View -> Tabs -> Scripting来确保这个窗口可见。
- 使用
-
crt.Screen.Synchronous:- 在脚本中,特别是当脚本需要精确地等待某些输出时(
WaitForString),将crt.Screen.Synchronous设置为True是一个好习惯,这可以防止脚本在终端设备还未完全输出完信息时就继续执行,导致逻辑错误。 - 脚本执行完毕后,最好将其改回
False,以免影响你后续的手动操作。
- 在脚本中,特别是当脚本需要精确地等待某些输出时(
-
调试:
- 如果脚本没有按预期暂停,请检查是否有语法错误。
- 确保
input()的提示信息能够正确显示在 Scripting 窗口中。
| 需求场景 | 推荐方法 | 说明 |
|---|---|---|
| 等待用户输入文本后继续 | input("提示信息") |
最常用,简单直接,在 Scripting 窗口交互。 |
| 仅等待用户点击确认 | crt.Dialog.MessageBox("提示", "标题") |
适合简单的确认操作,有弹窗提示。 |
| 让脚本休眠固定时间 | import time; time.sleep(秒数) |
适用于需要定时或延迟的场景。 |
| 在循环中等待用户触发 | while True: + input() |
适用于需要用户一步步控制脚本执行流程的情况。 |
对于绝大多数“暂停”需求,input() 函数 是最灵活、最简单的选择。
