一种控制台程序自动控制方法

文档序号:6436136阅读:212来源:国知局

专利名称::一种控制台程序自动控制方法
技术领域
:本发明涉及一种控制台过程控制方法,特别是涉及一种具有输出缓冲区的控制台程序的自动控制方法。
背景技术
:随着计算机技术的发展,计算机操作系统,如Windows引入了多进程和多线程机制,同时也提供了多个进程之间的通信手段。针对带有特定输出缓冲区的控制台(Console)程序,需要多个输入步骤(或命令)来完成任务,若想通过进程通信得到该Console的每一步骤的控制信息,使用现有的方法通常很难实现。主要原因有以下三种1、该Console有自己的输出缓冲区,一旦该进程接受来自外界的输入命令(非Exit命令),就会自动进入自己的输出缓冲区,而不是Stdout(标准控制台输出)。请参见图1,该图是现有技术标准输入输出的示意图,如图所示第一控制台输入对第二控制台20的控制指令,该第二控制台连接有一输出缓冲区21,该第二控制台进程的标准输出均储存在该输出缓冲区21中,因此作为控制进程的第一控制台10就无法得到命令的返回信息。因而无法从另一个进程得到该输入命令的输出信息。2、执行一条命令(非Exit后),不但无法得到返回信息,而且该Console进程进入了其特定的输出缓冲区,进程通信无法再控制Console,只能使用非常规的方法退出,这样必然会增加系统的负担和风险。3、若需要通过N(N>=1)个步骤(或命令)才能获得信息,现有的方法也无法实现;因为该Console在接受到第一个命令后,就不再受控。控制台程序可以调用另一个控制台程序并完成输入输出的复位向,具体做法是直接在调用第二控制台子进程时用命令行中的管道指令“>”将子进程的标准输出复位向到一个缓冲区,子进程运行完毕后再去读取该缓冲区中的内容。这样很难实时监控第二控制台子进程的输出,如果子进程不是随时刷新stdout的话,只能等一整块数据实际写入缓冲区之后才能看到运行结果。但是对于一些高级的Console控制程序,为了安全起见,通常在运行过程中有自己的输入缓冲和输出缓冲。例如FTP进入FTPConsole后,便会出现“ftp>”字样;这便进入了ftp的自己输入缓冲(输出缓冲);我们无法利用进程通信通过Stdin来向该Console发送“quit”命令。又如控制CLIConsole,该Console提供的边历信息的接口,它通过一系列特定的Command组合来确定输出信息的内容。该Console启动后,会进入“CLI>”接口,它会Hook住Console外部的stdin和stdout。因此对于以上两种高级Console模式的进程,无法在该Console程序运行过程中与该进程通信,这样无法达到自动控制的目的,也无法使该Console程序自动退出,因而会影响系统性能。
发明内容本发明所要解决的技术问题在于提供一种控制台程序的自动控制方法,主要的目的在于控制Console程序的运行并截获其运行结果。为了实现上述目的,本发明提供了一种控制台程序自动控制方法,其可通过第一控制台控制具有独立输出缓冲区的第二控制台的程序的执行,同时截获该执行结果,其特点在于,该方法包括如下步骤在该第一控制台创建一脚本,用以接收该第二控制台需要执行的命令;创建该第一控制台与该第二控制台的通信连接;通过该脚本信息接收用户输入和编辑的命令;执行控制台服务程序,分析该脚本信息,执行该脚本信息中的命令;及将该执行结果返回至该第一控制台。上述控制台程序自动控制方法,其特点在于,该脚本信息格式包括该第二控制台启动时所需的参数信息;该第一控制台自定义的命令流程;及该第二控制台退出其输出缓冲区的命令。上述控制台程序自动控制方法,其特点在于,该输出缓冲区还用以存放该第二控制台执行过程中的该执行结果。上述控制台程序自动控制方法,其特点在于,该创建第一控制台与第二控制台的通信连接的步骤,为通过管道命令建立该第一控制台与该第二控制台的通信连接。上述控制台程序自动控制方法,其特点在于,该接收用户输入和编辑的命令的步骤,为启动控制台命令提示符程序(cmd.exe)来接收用户输入和编辑的命令。上述控制台程序自动控制方法,其特点在于,还包括缓存该第二控制台的执行结果的步骤。本发明的功效,在于控制Console程序的运行并截获其运行结果,在Console程序运行过程中与该进程通信,达到自动控制的目的,也使该Console程序自动退出。以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。图1为本发明所提的控制台程序自动控制方法的运作流程图;图2为本发明所提控制台程序自动控制方法的运作流程图;图3为本发明通过管道控制的示意图;图4为本发明的总体结构图;及图5为本发明实施例的接口示意图。其中,附图标记10-第一控制台,20-第二控制台21-输出缓冲区,30-管道40-控制模块步骤210-在该第一控制台创建一脚本,用以接收该第二控制台需要执行的命令步骤220-创建该第一控制台与该第二控制台的通信连接步骤230-通过该脚本信息接收用户输入和编辑的命令步骤240-执行控制台服务程序,分析该脚本信息,执行该脚本信息中的命令步骤250-将该执行结果返回至该第一控制台具体实施方式本发明系为一种控制台程序自动控制方法,首先由图2说明本发明的系统,该图为本发明所提的控制台程序自动控制方法的运作流程图,说明如下步骤210,首先在该第一控制台创建一脚本,用以接收该第二控制台需要执行之命令,步骤220,然后创建该第一控制台与该第二控制台的通信连接,步骤230,通过该脚本信息接收用户输入和编辑的命令,步骤240,执行控制台服务程序,分析该脚本信息,执行该脚本信息中的命令,步骤250,将该执行结果返回至该第一控制台。请参见图3,为本发明通过管道控制的示意图。常见的Console程序通过标准输入(Stdin),标准输出(Stdout)作为其输入、输出。若希望能够自动控制一个Console的执行并截获执行的结果,可以采用一些手段,例如管道(Pipe)30来实现,向输入管道送入Console运行需要的参数(例如定向文本输入),然后读取输出管道来获得需要的信息(例如定向文本输出)。请参见图4,该图为本发明总体结构图。本发明通过一控制模块40运行一个中介程序以及一工具程序,该中介程序调用需要调用的工具程序并随时获取该程序的输出信息,然后直接将信息用约定的进程间通信方式(比如匿名管道)传回。第一控制台10把需要执行的命令以脚本(文件流)的方式传给控制模块40,控制模块40根据从第一控制台10传送的脚本,逐个分析执行命令(Command),并把中间过程所有信息返回给第一控制台10。第一控制台10取回全部命令返回信息。其中脚本信息的格式如下所示InitCommandConsoleB启动时需要的一些参数信息ExitCommandConsoleB推出自己输出缓冲区的命令。其中该工具程序和中介程序都是以隐藏的方式运行的。工具程序原本输出到stdout的信息被复位向到中介程序开辟的管道中,中介程序再创建的管道将信息实时传递到一个后台线程里。下面以一具体实施例对本发明进行详细说明。请参见图5,该图是本发明实施例的接口示意图。图中显示的黑色窗口称为控制台窗口,程序的输入、输出均在这个窗口中进行。如图所示,该tool即afacli.exe有自己的命令提示符和输出缓冲区,该tool可以获取有关SCSIRaid的信息。如果我们用Keyboard的方式与之交互,则需要以下几个步骤,<\n>表示回车。(Tool例如为SCSIRaid信息获取工具。)controllerlist<\n>opencontrollername<\n>diskshowspace<\n>exit<\n>用我们提供的控制模块实现1Makeinputscriptin.txtcontrollerlist<\n>opencontrollername<\n>diskshowspace<\n>exit<\n>2建立本地程序与控制进程的通信机制(利用管道实现)STARTUPINFOsi;PROCESS_INFORMATIONpi;ZeroMemory(&si,sizeof(si));si.cb=sizeof(STARTUPINFO);si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;si.hStdOutput=hChildStdoutWr;si.hStdInput=hChildStdinRd;si.hStdError=NULL;si.wShowWindow=SW_HIDE;3CallConsoleServiceCommandPlatformProcess(cmd.exe)CreateProcess(NULL,//Nomodulename(usecommandline).″cmd.exe″,//Commandline.NULL,//Processhandlenotinheritable.NULL,//Threadhandlenotinheritable.TRUE,//InheritHandle.MustbeTRUE!!.0,//CreateNewConsole//NORMAL_PRIORITY_CLASS|CREATE_NEW_PROCESS_GROUP,//Nocreationflags.NULL,//Useparent’senvironmentblock.NULL,//Useparent’sstartingdirectory.&si,//PointertoSTARTUPINFOstructure.&pi)//PointertoPROCESS_INFORMATIONstructure.)4控制模块输入in.txt,把消息存放到out.txt中WriteFile(hWriteFile,_T(″afacli<in.txt>out.txt\r\n″),sizeof(_T(″afacli<in.txt>out.txt\r\n″)),&dwBytesWrite,NULL);。当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明权利要求的保护范围。权利要求1.一种控制台程序自动控制方法,其可通过第一控制台控制具有独立输出缓冲区的第二控制台的程序的执行,同时截获该执行结果,其特征在于,该方法包括如下步骤在该第一控制台创建一脚本,用以接收该第二控制台需要执行的命令;创建该第一控制台与该第二控制台的通信连接;通过该脚本信息接收用户输入和编辑的命令;执行控制台服务程序,分析该脚本信息,执行该脚本信息中的命令;及将该执行结果返回至该第一控制台。2.根据权利要求1所述的控制台程序自动控制方法,其特征在于,该脚本信息格式包括该第二控制台启动时所需的参数信息;该第一控制台自定义的命令流程;及该第二控制台退出其输出缓冲区的命令。3.根据权利要求1所述的控制台程序自动控制方法,其特征在于,该输出缓冲区还用以存放该第二控制台执行过程中的该执行结果。4.根据权利要求1所述的控制台程序自动控制方法,其特征在于,该创建第一控制台与第二控制台的通信连接的步骤,为通过管道命令建立该第一控制台与该第二控制台的通信连接。5.根据权利要求1所述的控制台程序自动控制方法,其特征在于,该接收用户输入和编辑的命令的步骤,为启动控制台命令提示符程序(cmd.exe)来接收用户输入和编辑的命令。6.根据权利要求1所述的控制台程序自动控制方法,其特征在于,还包括缓存该第二控制台的执行结果的步骤。全文摘要本发明涉及一种控制台程序自动控制方法,其可通过第一控制台控制具有独立输出缓冲区的第二控制台的程序的执行,同时截获该执行结果,其特点在于,该方法包括如下步骤在该第一控制台创建一脚本,用以接收该第二控制台需要执行的命令;创建该第一控制台与该第二控制台的通信连接;通过该脚本信息接收用户输入和编辑的命令;执行控制台服务程序,分析该脚本信息,执行该脚本信息中的命令;及将该执行结果返回至该第一控制台。本发明可控制Console程序的运行并截获其运行结果,在Console程序运行过程中与该进程通信,达到自动控制的目的,也使该Console程序自动退出。文档编号G06F9/00GK1770095SQ20041008881公开日2006年5月10日申请日期2004年11月4日优先权日2004年11月4日发明者宋建福,刘文涵,陈镇申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1