脚本调用方法及指令调试装置与流程

文档序号:12463582阅读:132来源:国知局
脚本调用方法及指令调试装置与流程

本公开涉及计算机技术领域,具体地,涉及一种脚本调用方法及指令调试装置。



背景技术:

nodejs作为一种适用于前后端编程的软件运行平台,已经广泛应用于各种类型的软件产品中。nodejs近年来才逐渐进入中国软件领域,作为一种相比C、Java语言来讲比较新的编程软件环境,nodejs由于其无阻塞I/O及事件驱动,可以方便地搭建易于扩展、响应速度快的软件产品/软硬件产品。

目前,nodejs是利用子进程来调用系统命令或者文件,例如,使用子进程调用python脚本、shell脚本等。子进程调用的方式虽然比较直接,但系统命令或者文件的运行与子进程之间的耦合性较大。nodejs对子进程间的调度及管理较为困难,从而导致系统命令或文件的运行灵活性差。



技术实现要素:

为克服相关技术中存在的问题,本公开提供一种脚本调用方法及指令调试装置。

根据本公开实施例的第一方面,提供一种脚本调用方法,所述方法应用在指令调试装置上,所述指令调试装置包括软件运行模块与文件管理模块,所述软件运行模块与所述文件管理模块之间架设有消息队列,所述方法包括:所述软件运行模块通过所述消息队列发送调用请求消息,所述调用请求消息用于请求调用待调用脚本,包括所述待调用脚本属性参数;所述文件管理模块通过所述消息队列接收所述调用请求消息,以获取所述待调用脚本的属性参数;以及所述文件管理模块根据所述待调用脚本的属性参数调用所述待调用脚本。

根据本公开实施例的第二方面,提供一种指令调试装置,所述指令调试装置包括软件运行模块与文件管理模块,其中,所述软件运行模块与所述文件管理模块之间架设有消息队列;所述软件运行模块被配置为通过所述消息队列发送调用请求消息,所述调用请求消息用于请求调用待调用脚本,包括所述待调用脚本属性参数;所述文件管理模块被配置为通过所述消息队列接收所述调用请求消息,以获取所述待调用脚本的属性参数,以及根据所述待调用脚本的属性参数调用所述待调用脚本。

本公开的实施例提供的技术方案可以包括以下有益效果:通过在软件运行模块与文件管理模块之间建立消息队列传输机制,软件运行模块通过消息传输的方式发送文件调用信息,文件管理模块基于文件调用信息调取对应的文件(或者脚本),并控制其执行相应的动作,因此,待调用文件的进程不再依赖于软件运行模块的进程,而由文件管理模块管理待调用文件的进程,达到了软件运行模块与文件管理模块解耦和的目的,同时其使得调用信息传递更为优化,且返回值的接收方式更为灵活。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据一示例性实施例示出的一种指令调试装置的示意性结构框图。

图2是根据另一示例性实施例示出的一种指令调试装置的示意性结构框图;

图3是根据一示例性实施例示出的一种脚本调用方法的流程图;

图4是根据另一示例性实施例示出的一种脚本调用方法的流程图;

图5是根据另一示例性实施例示出的一种脚本调用方法的流程图;

图6是根据另一示例性实施例示出的一种脚本调用方法的流程图;

图7是根据另一示例性实施例示出的一种脚本调用方法的流程图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

相关技术中,软件运行环境运行软件程序时,都是通过子进程的方式调用系统命令或者文件,例如,通过子进程调用脚本(脚本是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件)。

本公开提供一种新的脚本调用方法,可以在软件运行环境(或者软件运行框架,例如一种Javascript运行环境nodejs)在调用系统命令或文件时应用。在本公开实施例中,可以在软件运行环境端与待调用文件(或命令)管理端建立消息队列机制,使两端可以通过消息队列进行通信,传输消息,进而实现软件运行环境对待调用文件(或命令)的调用。其中,软件运行环境可以包括但不限于nodejs、VC++(Microsoft Visual C++,为C、C++等语言开发工具)、JDK(Java Development Kit,称为Java开发包或Java开发工具)等,待调用文件管理端可以包括但不限于python脚本文件管理端(例如,可以包括多个python脚本)、shell脚本文件管理端(例如,可以包括多个shell脚本)。

需要说明的是,在后续实施例中,将软件运行环境端统称为“软件运行模块”,待调用文件管理端统称为“文件管理模块”,将“软件运行模块”和“文件管理模块”所处的共同装置统称为“指令调试装置”。以及,为了清楚、简洁地描述本公开技术方案,后续实施例将以nodejs调用python脚本为例进行描述,本领域技术人员可以理解,这些描述仅为示例性的,而不会对本公开造成限制。

以下将结合附图对本公开提供的一种脚本调用方法和指令调试装置的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

图1是根据一示例性实施例示出的一种指令调试装置的示意性结构框图。

如图1所示,本公开实施例提供的一种指令调试装置100,其可以包括软件运行模块110与文件管理模块120,软件运行模块110与文件管理模块120之间架设有消息队列。

其中,软件运行模块110被配置为可以通过消息队列发送调用请求消息,调用请求消息用于请求调用待调用脚本,包括有待调用脚本属性参数。文件管理模块120被配置为可以通过消息队列接收软件运行模块110发出的调用请求消息,以获取待调用脚本的属性参数,并根据待调用脚本的属性参数调用待调用脚本。在一些实施例中,指令调试装置100可以是功能、性能等较单独的软件运行模块110或文件管理模块120更为完善的软件环境,也可以是包括有软件运行模块110和文件管理模块120,且能够运行软件运行模块110和文件管理模块120的软件系统,或者是包括有软件运行模块110和文件管理模块120,且能够运行软件运行模块110和文件管理模块120的、具有数据处理能力的微处理器,还可以是包括有前述微处理器的计算机设备。本公开对指令调试装置100的具体存在形式不作限制。

软件运行模块110可以包括但不限于nodejs、VC++(Microsoft Visual C++,为C、C++等语言开发工具)、JDK(Java Development Kit,称为Java开发包或Java开发工具)等软件开发工具(或者软件开发平台)。

文件管理模块120可以包括但不限于用于管理python脚本文件的软件模块或者软件平台(示例性地,可以为python的开发环境或开发工具,且可以存储有多个python脚本,例如,存储有多个.py结尾的文件)、用于管理shell脚本文件的软件模块或者软件平台(示例性地,可以为shell脚本的一种开发工具eclipse,可以存储有多个shell脚本,例如,存储有多个.sh结尾的文件)。

示例性地,软件运行模块110与文件管理模块120之间的消息队列可以包括但不限于ActiveMQ、ZeroMQ、RabbitMQ等。而由于RabbitMQ是用erlang语言开发的、流行的开源消息队列系统,作为AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的标准实现,其支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。因此,在本公开实施例中,将消息队列为RabbitMQ作为优选方案。

在本公开一些实施例中,软件运行模块110和文件管理模块120可以根据自身的功能特性等,选择不同的类库、函数等实现消息队列。下面仍以nodejs和python脚本开发工具为例。

图2是根据另一示例性实施例示出的一种指令调试装置的示意性结构框图。如图2所示,可在nodejs端设置amqplib模块,在python脚本开发工具端设置pika模块,从而可在amqplib模块与pika模块之间形成例如RabbitMQ消息队列。Nodejs端可通过amqplib模块发送和接收消息队列中的消息。Nodejs端在添加了amqplib模块之后,对python脚本开发工具端的脚本的调用会统一使用消息方式,而不需要采用子进程调用。python脚本开发工具端可通过pika模块发送和接收消息队列中的消息。python脚本开发工具端在添加了pika模块之后,可以由本端管理脚本进程,而不需要通过Nodejs端启动进程进行管理,并且在将脚本进程结果传回Nodejs端时,也可统一使用消息的方式。

amqplib模块与pika模块都是本领域技术人员使用的开源第三方控件,在本公开实施例中,实现消息队列不限于使用这两种控件,能够实现消息队列的控件、且能够满足对应软件或者平台(例如,nodejs和python脚本开发工具)的应用或安装条件即可。RabbitMQ消息队列是轻量级消息队列系统,遵循开源协议,同样可以替换为支持消息收发的其他消息队列系统。需要说明的是,替换amqplib模块或者pika模块,甚至是RabbitMQ消息队列都不会对系统产生影响,系统所需的只是消息队列的通信方式。

本公开实施例通过在软件运行模块与文件管理模块之间建立消息队列传输机制,软件运行模块通过消息传输的方式发送文件调用信息,文件管理模块基于文件调用信息调取对应的文件(或者脚本),并控制其执行相应的动作,再通过消息传输方式将执行结果返回给软件运行模块,因此,待调用文件的进程不再依赖于软件运行模块的进程,而由文件管理模块管理待调用文件的进程,达到了软件运行模块与文件管理模块解耦和的目的,同时其使得调用信息传递更为优化,且返回值的接收方式更为灵活。

此外,本公开实施例还提供了一种脚本调用方法,该方法可以应用于指令调试装置100上。下面将结合附图,对本公开一实施例的一种脚本调用方法进行详细描述。

图3是根据一示例性实施例示出的一种脚本调用方法的流程图。

如图3所示,一种脚本调用方法,应用在指令调试装置上,指令调试装置包括软件运行模块与文件管理模块,软件运行模块与文件管理模块之间架设有消息队列,该方法包括如下步骤:

步骤310,软件运行模块通过消息队列发送调用请求消息,其中,调用请求消息用于请求调用待调用脚本,可以包括待调用脚本的属性参数。

待调用脚本的属性参数可以包括但不限于待调用脚本的脚本名称、功能名称、需要对待调用脚本执行的动作对应的标识、自用户输入的针对待调用脚本的自定义参数等。

根据本公开一实施例,调用请求消息还可以包括标识符,标识符用于将当前调用请求区别于其他任一调用请求。通过在调用请求消息中标注标识符,在同时又多个调用请求发出的情况下,可以将各个调用请求区别开,以在后续处理中避免混乱,保障调用结果的准确性和时效性。

在本步骤中,以nodejs为例,nodejs可以将调用请求消息发送至消息队列,以等待对端(例如,文件管理模块)从消息队列取调用请求消息。示例性地,采用消息队列RabbitMQ,其中的Exchange(即消息交换机)可以指定调用请求消息按什么规则,路由到哪个队列,例如,可以通过RabbitMQ中的Exchange指定调用请求消息路由到用于与文件管理模块进行消息通信的队列中,以供文件管理模块从该队列中获取调用请求消息。

步骤320,文件管理模块通过消息队列接收调用请求消息,以获得待调用脚本的属性参数。

文件管理模块可以从消息队列中获取调用请求消息。示例性地,文件管理模块可以监听消息队列中的消息状态,当有新的消息进入消息队列时,从消息队列中获取该新的消息。或者将文件管理模块设置为消息队列的持久化的订阅消费者,消息生产者(例如,软件运行模块)产生的新消息进入消息队列后,将该新消息主动推送给订阅消费者,即文件管理模块。

步骤330,文件管理模块根据待调用脚本的属性参数调用待调用脚本。

根据本公开一实施例,在本步骤中,文件管理模块可以根据在步骤220中获取的待调用脚本的属性参数查找对应的脚本,并控制与属性参数中相适应的脚本运行,进一步地,将脚本运行的结果通过消息队列返回给软件运行模块,从而实现脚本调用。下面仍以nodejs和python脚本开发工具为例。

图4是根据另一示例性实施例示出的一种脚本调用方法的流程图。如图4所示,脚本调用方法包括:nodejs发送调用请求消息,调用请求消息可以包含所请求调用的python脚本的脚本名称、所需执行的动作及相关参数(可以是自用户输入的自定义参数);以及python脚本开发工具接收调用请求消息,控制所请求调用的python脚本按照相关参数执行动作,并将执行的结果通过消息返回给nodejs。

通过消息队列的通信方式,在软件运行模块调用文件(或者脚本)时,将文件的属性参数通过消息发送给文件管理模块。文件管理模块接收到消息之后,可管理对应文件(或者脚本)的运行进程,脱离了软件运行模块对文件运行进程的控制,使软件运行模块更关注业务逻辑而无须操作进程调度。

此外,在传递参数方面,软件运行模块可以更加灵活地将需要的参数通过消息封装传递给文件管理模块,以进行后续进程组合处理,使得软件运行模块和文件管理模块的接口更加灵活,有效地传递参数。

以及在脚本调用方面,文件管理模块控制文件(或者脚本)运行后,通过消息将运行结果反馈给nodejs,可以更加方便的封装返回结果,而且可以多次发送运行结果或运行中的消息,保障消息的实时性,进而保障后续进程的时效性。

图5是根据一示例性实施例示出的一种脚本调用方法的流程图。

如图5所示,本公开实施例提供的一种脚本调用方法,应用在指令调试装置上,指令调试装置包括软件运行模块与文件管理模块,软件运行模块与所述文件管理模块之间架设有消息队列,该方法可以包括如下步骤:

步骤510,软件管理运行模块通过消息队列发送调用请求消息,其中,调用请求消息用于请求调用待调用脚本,可以包括待调用脚本的属性参数。

本步骤与前述实施例中的步骤310的原理、实现方式、技术效果等均一致,为了简洁,在此不再赘述。

步骤520,文件管理模块通过消息队列接收调用请求消息,以获取待调用脚本的属性参数。

本步骤与前述实施例中的步骤320的原理、实现方式、技术效果均一致,为了简洁,在此不再赘述。

步骤530,文件管理模块对所待调用脚本的属性参数的合法性进行校验。

在本步骤中,例如可以对脚本名称、脚本功能名称等进行校验,示例性地,待调用脚本为python脚本,则脚本名称需为.py结尾的文件名称才是合法的。

步骤540,文件管理模块确定所述待调用脚本的属性参数合法时,通过消息队列向软件运行模块发送确认消息,以告知软件运行模块收到调用请求消息。

步骤550,文件管理模块根据待调用脚本的属性参数匹配到对应的待调用脚本。

在本步骤中,由于步骤540已确定待调用脚本的属性参数的合法,因此,在本步骤可以根据例如脚本名称、脚本功能等查找到匹配的脚本。通过脚本名称、脚本功能等匹配查找脚本,能够将脚本查找过程定向化,缩小查找范围,快速定位到需要调用的脚本。可以理解,不限于实验脚本名称、脚本功能等定位需要调用的脚本,还可以根据脚本存储时间、脚本更新时间等定位,本公开对此不作限制。

步骤560,文件管理模块控制待调用脚本运行,以得到运行结果。

在本步骤中,待调用脚本的属性参数还可以包括期望的执行动作、用户自定义的运行参数等等,示例性地,可以基于期望的执行动作、用户自定义的运行参数等控制待调用脚本运行,最终得到运行结果。

根据本公开一实施例,文件管理模块自控制待调用脚本运行时起至得到待调用脚本的运行结果时止,每隔第二预设时间阈值可以定时地向软件运行模块发送状态信息,状态信息用于表示文件管理模块的当前状态,例如,表示文件管理模块当前正常运行待调用脚本的状态、表示文件管理模块已控制待调用脚本运行的进度状态(如,待调用脚本已运行完成50%、待调用脚本已运行完成80%)。由于文件管理模块运行脚本可能需要花费较长时间,例如10分钟,通过该实施例,文件管理模块在此期间可以定时(例如,每45秒)地向软件运行模块发送状态信息,使软件运行模块掌握脚本运行的进度和状态,避免软件运行模块由于长时间未接到文件管理模块的响应而关闭调用请求,保障脚本调用的有效性和时效性。

步骤570,文件管理模块通过消息队列将运行结果发送给软件运行模块。

文件管理模块通过消息队列发送运行结果的实现方式,可以参考软件运行模块发送消息、传递消息的方式,其原理相同,在此不再赘述。

步骤580,文件管理模块关闭待调用脚本的运行。

在本步骤中,文件管理模块可以通过标注结束标识符的方式结束脚本调用流程,例如,可以以completed=true作为结束标识符,结束调用流程,关闭待调用脚本。进一步地,将关于该调用请求的消息挪出消息队列。

根据本公开一实施例,在步骤510后,软件运行模块可以记录调用请求消息的当前发送时间,以及在自当前发送时间起至第一预设时间阈值时,检验是否收到确认消息,如果没有收到确认消息,则关闭对待调用脚本的调用请求。示例性地,设当前发送时间为12:00:00,第一预设时间阈值为15秒,若软件运行模块在12:00:15时未收到文件管理模块发送的确认消息时,则软件运行模块将关闭本次调用请求,并将本次调用请求相关的消息挪出消息队列。基于该实施例,能够保障调用请求中消息的时效性,以及避免无效的调用请求的消息占用队列,影响其他消息的传输,保障消息传输的稳定性和有效性。可以理解的是,第一预设时间阈值仅为示例性的,而不限定为15秒,具体可以根据实际应用需求设定。

下面将结合图6和图7所示的脚本调用方法中的软件运行模块和文件管理模块的消息传输示例进一步说明。

图6是根据另一示例性实施例示出的一种脚本调用方法的流程图。如图6所示,软件运行模块(例如,nodejs)可在发送调用请求消息之后,记录以下信息中的一者或多者:请求的发起时间、请求的名称及状态,记录请求的名称及状态可防止发送重复请求。

调用请求消息可包含用于对本次调用请求进行标识的唯一标识符,该唯一标识符用于在同时有多个请求的情况下,对一组或单个请求进行标识,与同时进行的其他请求相区分。

文件管理模块(例如,python脚本开发工具)在接收到调用请求消息之后,可校验所请求的脚本或功能名称。如果脚本或功能名称是合法的,则校验请求动作与其相关参数(例如,其他可自定义的参数)。在上述所请求的特定脚本的名称、所请求执行的动作及相关参数均合法的情况下,文件管理模块可以发送确认消息给软件运行模块。上述流程会在规定的时间内(例如,15秒以内)完成,以确保消息的时效性。当超过一定时间后,软件运行模块仍未收到文件管理模块端的确认消息,则可以关闭此次调用请求,进一步地,即使之后文件管理模块端发送确认消息,软件运行模块也会过滤该确认消息。

文件管理模块在发送确认消息之后,可以根据调用请求消息中的待调用脚本的属性参数控制对应的脚本运行。并在运行结束后,可以将运行结果通过消息返回给软件运行模块。

文件管理模块在脚本运行的结束时,可以以例如completed=true作为标识符来结束全部的流程。进一步地,文件管理模块可以关闭脚本,并且将与本次调用请求相关的消息挪出消息队列。而软件运行模块在接收到运行结果后,可以标记本次调用请求结束,例如以completed=true作为结束标识符,并将与本次调用请求相关的消息挪出消息队列。

图7是根据另一示例性实施例示出的一种脚本调用方法的流程图。区别于图6中的实施例,在图7所示的实施例中,在软件运行模块端设置有时间轮询机制,示例性地,软件运行模块端发起调用请求时,基于时间轮询机制,软件运行模块可以记录发起请求的当前时间,并第一预设时间阈值内(例如,15秒)校验是否收到文件管理模块端的返回的确认消息。如果超过该时间阈值没有收到确认消息,则本次调用请求无效,软件运行模块可以从消息队列中删除调用请求消息。

另一实施例,软件运行模块在时间轮询机制的基础上增设了对于文件管理模块的存活校验机制。软件运行模块在执行待调用脚本时,可能会出现运行时间较长的情况(例如10分钟),可以基于时间轮询机制和存活的校验机制,可以每隔预定时间(第二预设时间阈值,例如,45秒)去校验文件管理模块端的运行状态,文件管理模块端可以在此期间主动或被动地发送状态信息给软件运行模块,例如,可以是在接收到软件运行模块发送存活询问消息时发送状态信息,也可以是到底第二预设时间阈值时主动发送状态信息。

在一些实施例中,可以在软件运行模块和文件管理模块均设置相同的时间轮询机制,从而可以保证软件运行模块和文件管理模块两端的时序一致性。例如,python开发工具端在接收到调用请求消息之后,可检测其在预定时间(例如,15秒)之内是否发送了确认消息给nodejs,如果没有发送,则其可结束运行python脚本,因为此时nodejs可能已经关闭本次调用请求。另外,python亦可检测其是否在预定时间间隔内发送了一反映该python脚本的运行状态的状态消息至nodejs,如果没有,则其也可结束运行python脚本,因为此时nodejs可能已经关闭本次调用请求。应用该实施例,可以节省开发资源,避免无效调用。

综上所述,本公开提供的脚本调用方法和指令调试装置,可以达到以下几个目的:

1.通过在软件运行模块和文件管理模块之间建立消息队列通信,达到软件运行模块与文件管理模块之间解耦和的目的;

2.通过在软件运行模块和文件管理模块之间建立消息队列通信,脚本运行进程依赖于文件管理模块端,即脚本本身的运行环境,而无需软件运行模块端管理其进程,即无需调用端管理,使脚本运行更顺利,可以避免不同程序运行或者调试环境之间不兼容等问题;

3.通过在软件运行模块和文件管理模块之间建立消息队列通信,通过消息的方式进行调用参数和调用结果的传递,保障调用参数、调用结果的传输有效性,以及传输和接收方式更加灵活;

4.可以通过消息队列对调用请求中的消息进行统一管理。

本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个(可以是单片机,芯片等)或处理器(processor)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1