当前位置:文档之家› 基于Python的天文软件命令行界面设计与实现

基于Python的天文软件命令行界面设计与实现

基于Python的天文软件命令行界面设计与实现计算机软件技术的不断发展,推动了人机交互技术的长足进步。

从传统的命令行(Command Line Interface,CLI),到图形用户界面(Graphical User Interface,GUI),再发展到当前的自然用户界面(Natural User Interface,NUI)。

界面技术使得用户与计算机之间的交互过程越来越简单,越来越便捷。

无论界面技术如何发展,命令行技术作为一种基于文本命令的模式,一直被广大软件开发人员所喜爱,这是由命令行技术的特点决定的[1, 2]。

一是命令行可以通过纯字符完成命令的输入,不需要频繁地使用鼠标等其它交互手段;二是在熟练记忆命令的前提下,命令行的效率是所有的交互手段中最高的,特别是对大量重复处理、批处理的时候,命令行优势明显。

因此,无论图形界面技术如何发展,命令行均是主流软件考虑并保留的基本交互方式。

在天文数据处理领域,交互式数据语言(Interactive Data Language,IDL)、CASA(Common Astronomy Software Applications)等天文软件均提供了命令行接口。

CASA软件在原有的AIPS、AIPS++基础上发展起来,目前已经是射电天文领域最为常用的数据处理软件,其操作完全需要通过命令行实现,在使用中不难发现仍有一些不方便之处,主要表现在:(1)联机帮助功能不完备,不能分级提示。

当用户不熟悉该软件时,联机帮助过程不详尽,不能获知命令参数的类型及格式,导致用户无法正确使用该命令。

(2)命令库没有进行有效分类。

CASA命令复杂,数量庞大,在没有分类的情况下,在大量的命令中查找所需要的命令,对于操作人员非常困难。

从当前各类命令行界面的设计与特点来看,最为著名的是美国思科公司在其路由、交换机上实现的命令行界面,可以实现命令的联机帮助、自动命令补全、全程命令参数提示、严格的数据校验等。

在其推出后,迅速成为全世界命令行交互软件的一个参考标准。

国内外的后续产品都参考借鉴了思科公司(CISCO)的命令行风格。

本文借鉴思科公司命令行的设计思路[3, 4],在新一代中国太阳射电日像仪[5, 6](Chinese Solar Radio Heliograph,CSRH)数据处理系统的开发中,设计并实现了命令行界面系统-CSRHOS。

该软件基于射电天文当前流行的Python语言,以太阳射电日像仪数据处理系统为应用背景,通过多个视图实现不同的命令分类,在交互过程中可以进行有效的权限控制,并可以实现命令的自动补全和联机帮助,使用者无需记忆复杂的命令即可快速地输入命令,取得了较好的应用效果。

1 系统设计1.1 设计的需求分析天文软件与其它计算机应用软件相比并没有很大的特殊性,但针对一个望远镜的观测与数据处理软件系统,软件的使用与交互仍有较明确的单一需求。

包括:(1)交互命令要直观,输入的命令应尽可能简短;(2)对输入的数据必须有较强的检验,确保数据输入的合法性,避免影响最终的数据处理结果;(3)由于操作人员众多,尽可能不要让操作人员记忆太多的命令;(4)由于功能变化较大,要具有较好的可扩展性等;(5)系统的鲁棒性要好,用户输入错误不会导致系统异常或崩溃;(6)输入顺序的不同不应该影响数据的处理;(7)在输入命令时,为了避免命令歧义,要求命令关键字部分严格区分大小写,但用户输入的各类参数应具有较好的灵活性,比如可以不区分大小写,要适应人的自然等。

为此,CSRHOS-CLI的设计与实现应该达到如下要求:(1)为天文学家提供最为简单的交互方式。

输入时,支持正常的光标移动,可以利用上下光标键翻转已经发过的命令,避免重复输入;输入一个命令时,只要输入的内容可以完整且唯一地表明一个命令,则不需要再输入下去,比如,如果命令是enable,当输入en后,如果没有其它命令以en开头,则en就可以唯一地表示enable,用这样的技术简化用户输入。

(2)支持自动补全。

在用户输入一个命令的部分后,可以用Tab按键实现自动命令补全,比如用户输入en后,按Tab键,则屏幕应自动出现enable。

(3)在输入过程中,随时允许用户输入问号(?)实现联机帮助。

用户在命令行提示符下,如果直接按?号,则应该列出所有的可用命令;如果用户输入了e,在后面再按?号,则应显示所有的以e开头的命令,用这样的方式,可以让用户即使没有看操作手册,也可以根据提示内容进行操作。

(4)在输入时要严格进行数据类型的匹配与校验,比如,如果要求用户输入一个观测时间,则应该判断用户输入的是不是HH∶MM∶SS格式,输入的内容必须是数字,不能是字符,输入的范围要合理,HH 必须在00-23之间,MM必须在00-59之间。

同时,也必须满足人们的使用习惯,上午8∶30分,则可以输入8∶30∶0,这也是正确的格式。

(5)能够提供不同的视图,将不同类型的命令分布在不同的视图下,以帮助用户快速地找到命令,避免大量的命令在一起不容易查找。

比如针对星表计算的命令均放在一个视图下,把数据处理的均放在另一个视图等,就可以达到很好的命令分类效果。

(6)在输入命令时要严格区分命令关键字部分大小写,而参数部分不需要区分大小写。

例如,在计算某星体在某一时刻的视位置信息,命令“planet 2012-11-22 0∶0∶0 sun”计算太阳在2012-11-22零点的视位置,其中planet为命令关键字,sun为其中的一个参数,用户如果输入命令“PLANET 2012-11-22 0∶0∶0 sun”则错误,用户如果输入命令“planet 2012-11-22 0∶0∶0 Sun”是正确的。

(7)采用Python语言开发完成,这是考虑到当前在射电天文领域,Python语言正在成为最主流的语言,SunPy等大量的基础支撑包的出现给Python在天文软件中的开发带来了有力的支撑。

1.2 系统构架根据上述需求,CSRHOS-CLI的系统架构设计如图1,命令行系统主要分为4大部分,分别是:命令输入与联机帮助,命令解析、校验与执行,权限与视图控制,模块载入。

(1)命令输入与联机帮助:通过在Unix/Linux平台下的Readline[7]实现用户命令输入,提供Tab键自动补全和问号(?)联机帮助功能。

CSRHOS-CLI命令繁多,为用户提供自动补全和联机帮助功能,可以使用户快速输入命令,即使不熟悉本系统,也能根据帮助内容进行操作。

(2)命令解析、校验与执行:对用户输入命令进行匹配、补全,实现参数的有效性检验,调用相关函数并执行。

(3)权限与视图控制:实现权限设置和视图控制,分类管理各权限、视图下的命令,有效地加速命令的匹配与执行。

(4)模块载入:调用其他模块。

图1 CSRHOS-CLI系统构架Fig. 1 The architecture of the CSRHOS-CLI图选项1.3 系统流程根据CSRHOS-CLI 需求分析及总体架构设计,系统数据流程如图2。

图2 CSRHOS-CLI数据流程图Fig. 2 The flowchart of the CSRHOS-CLI图选项2 关键技术与实现2.1 参数数据类型定义与校验命令行交互方式中,用户会输入命令关键字与参数,这两部分均需要进行严格的判断。

为了满足天文数据处理的需求,考虑到交互中需要输入的数据类型,CSRHOS-CLI定义了一系列的天文数据类型并给出相应的校验正则表达式。

下面以TIME类型为例,说明数据类型校验。

在天文数据处理领域,TIME分为时、分、秒3部分,根据用户习惯的时间可以写成如下情况:时(0-9、00-19或20-23)、分(0-9或00-59)、秒(整数部分:0-9或00-59,小数部分:只能为数字或没有),得出正则表达式如下:CSRHOS-CLI中定义的数据类型几乎可以涵盖天文数据处理的所有数据类型,同时也对每个数据类型使用了正则表达式进行校验,在用户命令输入时即可检验输入参数是否正确。

根据天文数据处理需求,CSRHOS-CLI定义的部分相关数据类型及其描述如表1。

2.2 权限与视图控制考虑到软件使用者范围的广泛性,为提高系统安全性,避免任何用户都能修改系统配置,系统为不同用户提供不同权限;为满足命令的快速匹配,提高查找效率,提供多种视图分别管理不同类型命令,系统设置了权限与视图控制。

目前实现了3种基础权限和4种视图。

3种权限包括普通用户权限(NONE);特殊用户权限,允许使用特殊命令(ENABLE);管理员权限,允许修改系统配置(CONFIG)。

4种视图分别是公有命令视图(COMMON)、普通用户视图(NORMAL)、特殊命令视图(ENABLED)、系统配置命令视图(CONFIGUTRE)。

此外可以根据需要随时进行功能视图的扩展,比如针对太阳射电日像仪数据处理要求,将所有的星表功能集成在一个视图中,建立EPHEMERIS视图。

基于这些权限与视图,极大地增强了系统的安全性并方便用户对命令的管理。

2.3 联机帮助CSRHOS-CLI较之CASA,主要优点之一是实现了强大的命令分级联机帮助,用户在任何地方输入问号(?)即可获得联机帮助。

为了方便用户在不熟悉系统的情况下也能操作,用户可以在输入的命令中任何位置通过问号获取无论是命令关键字还是参数的详细作用与格式。

系统使用Python内置函数get_function_help()获取命令的帮助文档,该文档即为函数定义时,对函数功能、参数类型及格式的描述,用户命令通过Readline函数库输入,判断输入字符为“?”,则进入联机帮助流程,此时“?”所处的位置有4种情况:“?”、“命令<空格>?”、“参数<空格>?”、“命令<空格>命令?”,实现联机帮助详细流程如表2(帮助流程所提到的命令树见图3)。

图3命令树Fig. 3 The command tree of the CSRHOS-CLI图选项2.4 功能定义与扩展为了方便CSRHOS-CLI进行功能扩展,并快速集成新的功能,CSRHOS-CLI在初始化过程中,利用Python内置函数Globals()获取指定目录下(安装目录下的/script/lib)所有对象和函数,通过匹配函数前缀“ccli_”生成命令函数集_functions,并初始化命令函数所在权限和视图信息字典_functions_access,通过权限视图信息,建立一棵全局命令树结构,命令树以各视图及视图下命令的元素(关键字与参数)为下层节点,即可得到各权限视图下的命令树(全局命令树的子树)。

图3给出一个命令树的示意图,从中不难看出,所有的命令拆分成命令关键字与参数两大部分(在命令树上关键字部分为小写,参数部分为大写),并按所在的视图分别挂在全局命令树各节点上。

相关主题