我知道这个主题在 这里 有相似的讨论,但我的设计要求稍微更为复杂。
我正在设计一个 CLI 脚本,将在 SSH 窗口中运行。该脚本将托管和执行在 Ubuntu 14.10 服务器上。它旨在以前台模式积极监控主机交换机上端口和客户端的当前状态。每30秒或由用户定义时,它将通过SNMP获取数据,然后刷新信息并显示到屏幕上。当等待下一次刷新时,有一个计时器指示何时再次查询设备以获取信息。
我想允许用户随时按特定键来更改输出视图或编辑关键变量。 (此功能类似于 Unix 的 top
命令。)例如,按下 t
键将请求输入期望在循环之间的秒数。 h
、m
或 i
将切换显示 / 隐藏某些列。这些操作不会暂停计时器也不会退出循环,因为更改将应用于下一次刷新。 r
将强制立即刷新并应用更改。 q
或 Ctrl+C
将退出脚本。
主要活动将如下所示:
Query loop <-----------------------------
| |
| Process Data
| ^
| |
v Query Data #SNMPBULKWALK
Timer <------------- ^
| | | |
| | Check time remaining |
| | ^ |
| |_______________| |
|___________________________________|
如果使用按键中断,它将表现如下:
Query loop <----------------------
| | ???<---Change variables
| (Continue) ^
V | |
Timer <--------- !!INTERRUPT!!---------> Identify key
| | | ^
| | Check time remaining |
| | ^ |
| |___________| |
|_____________________________|
我有些困惑。据我所知,我可能需要实现线程 - 我没有经验 - 因为仅使用while
循环似乎不能满足我们的需求。我还不确定如何注入包含变量(例如计时器,显示格式标志)的对象的更改,因为它将不断被我们的循环使用。