APP下载

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

2015-03-24季凯帆

天文研究与技术 2015年2期
关键词:天文视图命令

陈 蒙,王 锋,2,邓 辉,季凯帆

(1. 昆明理工大学云南省计算机技术应用重点实验室,云南 昆明 650500;2. 中国科学院云南天文台,云南 昆明 650011)

CN 53-1189/P ISSN 1672-7673

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

陈 蒙1,王 锋1,2,邓 辉1,季凯帆1

(1. 昆明理工大学云南省计算机技术应用重点实验室,云南 昆明 650500;2. 中国科学院云南天文台,云南 昆明 650011)

天文数据处理软件的开发是天文技术研究的一个重要组成部分,如何为用户提供一个直观、快捷与友好的交互界面一直是软件开发人员关注的问题。在分析了当前主流命令行界面(CLI)技术与CASA软件命令行的一些不足的基础上,结合新一代中国太阳射电日像仪(CSRH)数据处理系统开发需求,设计并实现了一套基于Python语言的CSRH CLI用户界面系统。介绍了系统的实现框架和整体流程,并重点讨论了命令行中天文数据的数据类型定义、系统权限与视图控制、系统命令匹配、补全和联机帮助等技术难点的实现,进而通过软件开发中一个实际命令说明了在命令行框架下的模块开发方法,最后给出了命令行的运行界面与操作实例。研究成果已应用于太阳射电日像仪数据处理软件的开发中,取得了良好的效果,整个系统对其它天文软件的开发有较好的参考价值。

命令行;交互技术;太阳射电日像仪

计算机软件技术的不断发展,推动了人机交互技术的长足进步。从传统的命令行(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.3 系统流程

根据CSRHOS-CLI 需求分析及总体架构设计,系统数据流程如图2。

图1 CSRHOS-CLI系统构架

Fig.1 The architecture of the CSRHOS-CLI

图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,小数部分:只能为数字或没有),得出正则表达式如下:

regexp=r"((([0-9])|([0-1][0-9])|([2][0-3])):(([0-9])|([0-5][0-9])):(([0-9])|([0-5][0-9])) (.d+)?)"

CSRHOS-CLI中定义的数据类型几乎可以涵盖天文数据处理的所有数据类型,同时也对每个数据类型使用了正则表达式进行校验,在用户命令输入时即可检验输入参数是否正确。根据天文数据处理需求,CSRHOS-CLI定义的部分相关数据类型及其描述如表1。

2.2 权限与视图控制

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

目前实现了3种基础权限和4种视图。3种权限包括普通用户权限(NONE);特殊用户权限, 允许使用特殊命令(ENABLE);管理员权限, 允许修改系统配置(CONFIG)。4种视图分别是公有命令视图(COMMON)、普通用户视图(NORMAL)、特殊命令视图(ENABLED)、系统配置命令视图(CONFIGUTRE)。此外可以根据需要随时进行功能视图的扩展,比如针对太阳射电日像仪数据处理要求,将所有的星表功能集成在一个视图中,建立EPHEMERIS视图。基于这些权限与视图,极大地增强了系统的安全性并方便用户对命令的管理。

表1 数据类型

2.3 联机帮助

CSRHOS-CLI较之CASA,主要优点之一是实现了强大的命令分级联机帮助,用户在任何地方输入问号(?)即可获得联机帮助。为了方便用户在不熟悉系统的情况下也能操作,用户可以在输入的命令中任何位置通过问号获取无论是命令关键字还是参数的详细作用与格式。系统使用Python内置函数get_function_help()获取命令的帮助文档,该文档即为函数定义时,对函数功能、参数类型及格式的描述,用户命令通过Readline函数库输入,判断输入字符为“?”,则进入联机帮助流程,此时“?”所处的位置有4种情况:“?”、“命令<空格>?”、“参数<空格>?”、“命令<空格>命令?”,实现联机帮助详细流程如表2(帮助流程所提到的命令树见图3)。

表2 联机帮助流程

2.4 功能定义与扩展

为了方便CSRHOS-CLI进行功能扩展,并快速集成新的功能,CSRHOS-CLI在初始化过程中,利用Python内置函数Globals()获取指定目录下(安装目录下的/script/lib)所有对象和函数,通过匹配函数前缀“ccli_”生成命令函数集_functions,并初始化命令函数所在权限和视图信息字典_functions_access,通过权限视图信息,建立一棵全局命令树结构,命令树以各视图及视图下命令的元素(关键字与参数)为下层节点,即可得到各权限视图下的命令树(全局命令树的子树)。图3给出一个命令树的示意图,从中不难看出,所有的命令拆分成命令关键字与参数两大部分(在命令树上关键字部分为小写, >参数部分为大写),并按所在的视图分别挂在全局命令树各节点上。从图上可以看到,有3个视图(NORMAL、CONFIGURE、EPHEMERIS),其中CONFIGURE视图下有两个命令(observatory longitude FLOAT和observatory latitude FLOAT),EPHEMERIS视图下有一个命令(sun DATE TIME)。在命令匹配时,根据该命令树进行命令查找,这样的实现方式,可以快速地判断当前命令的输入情况,进行命令补全和联机帮助。

2.5 命令解析、校验与执行

命令行交互式中,系统接收的命令由用户输入,不能完全保证用户输入即符合命令格式,在执行之前,需要对命令进行规范、补全,检验参数的有效性。命令的匹配、参数校验及执行流程如图4。在用户按下回车键后,系统进入命令匹配、参数检验流程。

图3 命令树

Fig.4 The flowchart of command matching and execution in the CSRHOS-CLI

3 模块编程示例

CSRHOS-CLI是一个命令行框架,事实上可以应用于所有的软件开发,提供命令行交互接口。对具体的软件开发人员来说,可以将开发完成的各个模块挂接在命令行框架下,实现基于命令行的命令调用。下面以中国太阳射电日像仪软件开发中的一个功能举例,说明如何在CSRHOS-CLI下进行挂载。在太阳射电日像仪数据处理中,用户需要计算太阳在一个观测时刻的视位置,为实现此功能,定义命令为:

sun DATE TIME

其中 “sun” 是关键字,“DATE” 和 “TIME” 表示需要输入日期参数与时间参数,格式如表1定义。根据在第2节讨论的相关内容,具体编程如下:(1)在安装路径下的/script/lib目录建立命令接口文件;(2)根据命令函数的定义格式进行函数具体实现;(3)定义该命令所在的权限与视图。具体实现代码的主要部分如图5。

代码定义了ENABLE权限、EPHEMERIS视图下的命令sun DATE TIME,根据命令函数格式,函数名为ccli_sun_DATE_TIME,其中第4行通过set_privilege()定义了该命令在ENABLE权限、EPHEMERIS视图下,6-11行为函数具体实现过程,其中7-10行为该命令注释部分,注释部分作为分级联机帮助文档即第7行对命令关键字sun解释,第8行对参数DATE解释,第9行对参数TIME解释,第11行即为命令具体实现部分(具体的星表计算部分略)。

1importephermeris 2 importprivileges 3 4 get_cli().set_privilege(privileges.ENABLE,privileges.EPHEMERIS,‘ccli_sun_DATE_TIME’) 5 6 defccli_sun_DATE_TIME(cdate,ctime): 7 “””Calculateapparentpositionofsun 8 Dateoftheobservation,ISOdateformat:YYYY⁃MM⁃DD 9 Timeoftheobservation,format:HH∶MM∶SSssss 10 “”” 11 ephermeris.ccli_planet_DATE_TIME_PLANET(cdate,ctime,‘sun’)

图5 模块代码示意图

Fig.5 Illustration of modularized coding with the CSRHOS-CLI

4 CSRHOS-CLI运行效果

CSRHOS-CLI系统已经在太阳射电日像仪数据处理软件中应用,同时也是一个通用的命令行框架,可以在其它天文软件中集成应用。软件的启动界面如图6。

图7展示了联机帮助和命令扩展效果:(1)在输入不完整的命令“su”后,输入问号,系统自动匹配到唯一以“su”开头的命令,并将其功能输出;(2)在输入不完整命令“su”,空格后输入问号,系统自动匹配到唯一以“su”开头的命令,获取该命令第2个字段详细作用及其格式并输出,实现了分级帮助;(3)在输入“su 2013-12-23 0∶0∶0”,并按下回车键,系统匹配到唯一以“su”开头的命令“sun”,校验其参数,并执行。

CSRHOS-CLI系统鲁棒性强,当用户输入错误的命令关键字或非法参数,系统均能识别。如图8,将TIME参数输为30∶0∶0,或将命令关键字输为sum,或将DATE参数输为2012-22-4,或将命令关键字部分大小写错误,系统通过参数校验检测到非法参数、命令匹配找不到命令,最后返回用户命令非法。

图6 启动界面

Fig.6 The splash screen of the CSRHOS-CLI

图7 联机帮助及扩展命令执行效果

Fig.7 A display of effects of online help and execution of extensions of input commands

图8 非法命令调用示意图

Fig.8 A display of effects of execution of illegal commands

5 结 论

本文针对中国太阳射电日像仪观测与数据处理系统用户界面设计和使用交互的需求,设计并实现了一套基于Python的CSRHOS-CLI命令行交互式框架,框架实现了天文数据的数据类型定义与有效性校验;系统利用Readline库的强大功能,实现了左右方向键移动允许字符插入,上下方向键滚动历史命令,自动将输入的命令行写入历史命令文件,Tab键的自动补全等诸多功能,大大加速了命令的输入,并提供了问号联机帮助功能,帮助用户快速地了解命令的作用及使用方法;该系统通过权限与视图的分类,提高了系统的安全性,极大地方便了命令的管理与使用,加大了命令的匹配及其执行速度;同时,用户可以根据不同的需求进行命令扩展,并设置命令所在的权限与视图。目前,CSRHOS-CLI已经应用于太阳射电日像仪数据处理软件中,取得了良好的应用效果,获得了使用人员的一致认可。

CSRHOS-CLI的实现,不仅对天文领域各天文数据处理交互软件的开发与设计提供了良好的借鉴和参考价值,同时也为广大命令行交互系统软件开发人员提供了非常好的架构参考,极大地方便了用户与系统的交互,该系统采用开源的方式发布,可以供技术人员在开发其它软件时集成使用。

[1] 黄玮伟. 通用命令行模块的设计及实现[D]. 浙江: 浙江大学, 2007: 1-2.

[2] Michael R K. Mastering Unix shell scripting[M]. San Bernardino: Macsource press, 2006.

[3] Boney J. Cisco IOS in a nutshell[M]. 2nd ed. USA: O’Reilly Media Incorporated, 2005.

[4] Dooley K. Cisco IOS cookbook[M]. 2nd ed. USA: O’Reilly Media Incorporated, 2006.

[5] 颜毅华, 张坚, 陈志军, 等. 关于太阳厘米-分米波段频谱日像仪研究进展[J]. 天文研究与技术——国家天文台台刊, 2006, 3(2): 91-98. Yan Yihua, Zhang Jian, Chen Zhijun, et al. Progress on Chinese solar radioheliograph in cm-dm wavebands[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2006, 3(2): 91-98.

[6] Yan Y, Zhang J, Wang W, et al. The Chinese spectral radioheliograph—CSRH[J]. Earth, Moon, and Planets, 2009, 104(1-4): 97-100.

[7] Python Software Foundation. 6.7. readline—GNU readline interface[M/OL].[2014-03-10]. docs.pytho.org/3/library/readline.html.

Design and Implementation of An Astronomical CommandLine Interface System Based on the Python

Chen Meng1, Wang Feng1,2, Deng Hui1, Ji Kaifan1

(1. Key Lab of Applications of Computer Technologies of the Yunnan Province, University of Science and Technologyof Kunming, Kunming 650051, China, Email: chenmeng@cnlab.net; 2. Yunnan Astronomical Observatories,Chinese Academy of Sciences, Kunming 650011,China)

Developing astronomical data processing software is important to research of astronomical technologies. It has long been an issue of concern of how to develop efficient and user friendly visual interactive interfaces for astronomical data processing software. In this paper we discuss the limitations of the mainstream Command Line Interfaces (CLIs), including the Common Astronomy Software Applications (CASA). Considering the requirements for the software system of the Chinese Solar Radio Heliograph (CSRH), we have designed and implemented a CLI system based on the Python language. We illustrate some key aspects of our design, including definitions of data types, techniques of matching system commands, methods of verifying data, control of user accessing, extensions of input commands, and installation of the online help function. We present an example of how to build a user-defined modularized CLI function in the system. We finally show screenshots of the interface. Our CLI system has been integrated into the data processing system of the CSRH. Our study can provide useful references for development of other astronomical software systems.

Command line; Interactive technology; CSRH

中国科学院-国家自然科学基金委员会天文联合基金重点项目 (U1231205);国家自然科学基金 (11103005, 11263004);云南省应用基础基金重点项目 (2013FA013, 2013FA032) 资助.

2014-06-17;修定日期:2014-07-22

陈 蒙,女,硕士. 研究方向:计算机应用技术. Email: chenmeng@cnlab.net

王 锋,男,教授. 研究方向:计算机应用技术. Email: wangfeng@cnlab.net

TP39

A

1672-7673(2015)02-0196-08

猜你喜欢

天文视图命令
只听主人的命令
天文篇
移防命令下达后
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
天文与地理
Django 框架中通用类视图的用法
这是人民的命令
天文知识普及