在spawn类当中我们需要学习的一些方法,这里主要分为两类方法。
第一类:其他发送信息方法
第二类:其他获取结果方法
这里面所谓其他发送信息就是由spawn类子程序发送相关的信息,包括子命令以及子命令运行的一些参数等等。其他获取结果方法是从子程序的返回中获取相应的信息。
其他发送信息方法包括:send(s)。这个方法和前面所使用的sendline是类似的。只发送字符串给子程序,不添加回车符(换行符)。给子程序发送子命令时,发送了回车符才表示发送结束,才开始执行子子命令。所以sends在使用的时候结尾一定发一个换行符。如果打开了日志,则会添加到日志中,返回已返回发送字节数。
write(s):用于向子程序发送子命令或者子命令的参数。同send方法,但无返回值。
writelines(sequence):可以将多行数据或者字符串放在一个列表,通过writeline依次发送给子程序。通过调用write()方法,将序列中内容发送。在发送时在结尾也不添加回车符或换行符。
sendcontrol:向子程序发送类似ctrl+d,ctrl+c等组合键。
sendeof:发送一个结束符,一般用于确认上一次发送内容缓冲结束。这个意思就是说在发送子命令前,发送一个sendof这是表示上一次的命令已经发送完毕。
sendintr:发送退出信号。
从子程序获取结果:expect_exact用法与expect()相同,匹配速度更快,除pattern不能使用正则表达式。只能使用字符串,字符串的表达式比正则表达式更快,所以匹配效率会更高一些。
expect_list:匹配列表只用已编译正则表达式和EOF、TIMEOUT,提高匹配速度,expect()方法是通过它的工作的。如果在前面调用expect方法时,pattern.提供的是一个列表,包括正则表达式,此时expect会调用expect_list方法,将列表中的正则表达式全部进行编译,编译完以后,再进行匹配。
reade(size=-1):从子程序输出中读取指定量数据,size为-1时读取时直到eof(当子程序退出后使用)“”
readeline(size=-1):-1时直接读取一行数据,0时返回为空,其它值时被忽略,返回一行。
首先我们尝试用send来多次发送一个子命令。当子命令被拆分为多个字符串时,可以用send进行多次发送。比如,向nslookup发送命令,可以使用child.send,第一次可以只发送域名,maiziedu.com,但是没有发送回车符,这时候这个作为子命令的话,不会被nslookup这条命令执行。紧接着,再发送回车符,这个地方少了一个child,发送一个回车符,这时这个子命令才会被运行。然后可以调用刚刚定义的getre这个方法,其它参数都不提供,使用默认值,刚才这个方法中参数出错了,所以从新进行匹配,直接输入child作为getre的参数。可以看到这个命令已经被执行了,这就是send方法的使用。
write方法的使用
在前面每一次输入send方法的时候,在运行返回以后,总是返回一个错值,比如这里是16,表示发送了16个字节的数据。write在发送时只发送相应的信息,不反应相应的发送量。比如发送麦子学院域名给子命令,并且将回车符一并发送,可以看到是没有返回值的,也就是不会告诉你发送了多少个字符。再次调用getre这个方法,可以看到查询成功了,当然还可以调用writeline,将多个字符串放在同一个列表来进行发送。比如将麦子学院的域名和换行符作为一个列表发送给子命令,可以看到writeline也不返回数据,发送的多少字符串也不返回客户端。还可以调用getre方法来查询结果,查询结果很上面的是一致的。
如果要接受子命令,可以按照刚刚sendcontrol也就是ctrl+d来接受子命令。也可以直接向子程序发送退出信号。
现在用sendintr发送命令:可以直接调用方法,就可以将子程序结束。如何知道子程序是否结束,通过child实例方法进行判断。通过isalive,返回False表示子程序结束。在接着看,如何用另外两种方法对子程序返回结果进行匹配。
首先启动nslookup,然后发送命令,就是子命令,依然是麦子学院域名,发送完成以后,可以使用expect_exact来对子程序的结果进行匹配。匹配时用法很expect相同,这里只能用字符串匹配。还可以调用getre这个方法,穿进去的参数要求调用exact方法进位匹配。这里匹配成功,这时候匹配成功并没有返回相应的查询信息,原因就是在刚刚在启动nslookup之后没有进行匹配,所以匹配到的是第一个返回的提示符,第二次查询还没有匹配到,可以再次调用这个方法。
我们再进行一次,向子程序发送查询域名的指令,查询完以后,获取结果,这时候仍然调用前面定义的getre方法,这时传递给它的匹配的是列表。第一个是子命令的提示符,第二个是麦子学院的域名,可以看到这时候匹配的是成功的,首先匹配的是maiziedu而不是子命令的提示符。这里expect_list方法就不再进行演示了。最后看一下read和readline方法。
read方法:首先运行子命令,然后通过调用read方法,比如为8,那么它会从结果当中读取8个字符,如果要获取一行,就可以调用readline,获取一行数据。如果要获取下一行数据,同样可以调用这个方法。如果要接受子程序,不仅可以调用刚刚所说的方法,还可以调用sendcontrol方法,弹入d将子程序结束掉。调用isalive,看子程序是否运行,False表示子程序结束。子程序结束以后就可以调用reade方法,来读取所有的信息,就是这些。
来源:麦子学院
原文链接:http://www.maiziedu.com/wiki/library/method/
相关推荐
spawn-fcgi-master 是 spawn-fcgi 的官方源码,但是不能在 windows 中编译。 spawn-fcgi-win32.c 是 windows 版源码,使用 MinGW 编译:命令行输入 “gcc spawn-fcgi-win32.c -lwsock32”即可无优化地编译, 懒得...
Laravel开发-spawn Laravel的模板生成器。
前端开源库-gulp-spawnGulp Spawn,Gulp的Spawn插件
posix-spawn - Rubys 快速进程::spawn基于posix_spawn() 系统接口
亲自测试通过 找了好长时间找到的 和大家分享一下 spawn-fcgi spawn-fcgi原本是lighttpd的... tar xf spawn-fcgi-1.6.3.tar.gz cd spawn-fcgi-1.6.3 ./configure --prefix=/usr/local/spawn-fcgi make && make install
spawn-fcgi.exe Windows下运行
spawn-fcgi源码,nginx要调用fastcgi等等一些外部程序,就需要用到spawn-fcgi来做端口绑定。
Laravel开发-laravel-app-spawn Laravel自定义应用程序实例引导创建者。主要用于进行拉拉维尔特定的测试。
spawn-fcgi是常用的fast cgi进程管理器,此处提供了spawn-fcgi-1.6.4的exe应用程序供大家测试使用! spawn-fcgi.exe for windows
Spawn 特定kubectl上下文(集群)的一个shell
前端开源库-easy-spawn轻松生成,使编写子进程更容易的实用程序。
c++开发fastcgi应用是需要的cgi管理工具,版本是1.6.4,解压缩后,运行./configure -> make -> make install 安装
http://blog.csdn.net/wangkangluo1/archive/2011/05/11/6411721.aspx 2. 下载spawn-fcgi ,编译安装 tar zxvf spawn-fcgi -1.6.0.tar.gz cd spawn-f cgi -1.6.0 ./conifgure make make install
内部包含xxfpm以及spawn-fcgi.exe,解压后根据需要选择其一即可,对于windows平台下nginx+php-cgi环境没有请求时php-cgi会自动释放的情况的解决方案,不明白的可自行百度查询相关资料,两个软件在windows Server 2003...
Unity ECS和JobSystem的测试代码
FastCGI软件开发套件“fcgi”编写FastCGI应用程序,包括fcgi-2.4.1.tar.gz和spawn-fcgi-1.6.4.tar.gz
产生同步这曾经是require('child_process').spawnSync但是现在所有主动维护的节点版本都已经支持spawnSync ,因此这只是重新导出spawnSync的存根。用法您应该从依赖项中删除该库,然后执行以下操作: var spawnSync ...
前端开源库-cross-spawn-with-kill杀戮交叉产卵,增加交叉平台
节点的spawn和spawnSync的跨平台解决方案。 安装 Node.js版本8及更高版本: $ npm install cross-spawn Node.js版本7及以下版本: $ npm install cross-spawn@6 为什么 在Windows上使用Spawn时,节点出现问题: ...
Node.js 最强大的一点就是“跨平台”。只要在编码时稍微注意一下,你的代码就通吃 Windows、Linux 和 OSX 平台。下面这篇文章主要介绍了如何利用Node.js编写跨平台的spawn语句,需要的朋友可以参考借鉴。