ruby|调用外部nodejs并处理返回结果
2021/9/13 14:05:05
本文主要是介绍ruby|调用外部nodejs并处理返回结果,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近需要在rails中写个脚本来生成汉字的拼音,找了一圈,发布在ruby里面是有拼音gem的(https://github.com/janx/ruby-pinyin),但已经太老了(6年前),所以搜了下其它语言的实现,感觉npm中的pinyin包比较合适,能够处理多音节(https://github.com/hotoo/pinyin),其返回结果正好就是数组形式,可以用ruby接受返回结果后再处理。
代码实战
title = PthSentence.last.title dir = File.dirname(__FILE__) cmd = "node #{File.join(dir, 'makePinyin.js')} #{title}" puts cmd output = `#{cmd}` arr1 = [] arrStr = "arr1 = #{output}" puts arrStr eval(arrStr) eval("puts arr1[0]")
解释下:
title = Sentence.last.title
获取到最后一个句子的标题。
如何调用nodejs
ruby中调用外部程序有三种办法:
exec
exec执行完外部程序并退出,可以作为最后一句,比如写转换视频、图像之类的脚本。
cmd = exec("echo 'hello'") puts '-' * 20
只会执行第一句,后面的因为已经退出程序,所以不会被执行。
system
system(command)返回的是子进程的结束状态,如果子进程正常退出(exit 0)则system返回true,否则返回false。
command = system(“touch a.rb") puts "安哥在此"
执行后会在当前目录下新建一个touch a.rb的文件,返回true后再打印第二句。system执行完后不像exec会直接退出程序。
使用``
最方便的就是用这个得到返回结果了,比如
cmd = `echo 'hello'` puts "-"*10
``是%x{}的一种简写,与下面的结果相同:
cmd = %x{echoo 'hello'}
我的程序中为排错方便,是先输出字符串。
dir = File.dirname(__FILE__) cmd = "node #{File.join(dir, 'makePinyin.js')} #{title}" puts cmd output = `#{cmd}`
执行node的时候,貌似需要使用绝对路径。
makePinyin.js如下:
var pinyin = require("pinyin") first_arg = process.argv.slice(2)[0] result = pinyin(first_arg, {heteronym: true, segment: true, group:false }) console.log(result)
判断返回是否成功
$? 表示最近一个子进程的状态
>> `echo hello` => "hello\n" >> $? => #<Process::Status: pid 18048 exit 0> >> $?.success? => true
我代码中还没有用到,记录以便以后备查。
使用eval
有了返回结果就可以用强大的eval来将字符串转化为代码执行。
arr1 = [] arrStr = "arr1 = #{output}" eval(arrStr) eval("puts arr1[0]")
需要你先把变量声明一次,不然会出错。不加arr1=[]时会出现这样的错误: undefined local variable or method `arr1’ for main:Object (NameError)
运行结果
这篇关于ruby|调用外部nodejs并处理返回结果的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程
- 2024-12-20Vue3入门教程:从零开始搭建你的第一个Vue3项目
- 2024-12-20从零开始学习vueRouter4:基础教程
- 2024-12-20Vuex4课程:新手入门到上手实战全攻略