Ruby中运行外部程序

有些时候我们需要在脚本中执行一个系统命令或运行一个外部程序,Ruby也提供了这样的功能,有如下三种方法可以在Ruby中运行外部程序:

1. `command`

直接使用`(键盘上Esc下边那个按键)把一个字符串括起来,Ruby会把该字符串当成是一个外部应用调用,等待执行命令的子进程结束并返回应用的输出。在执行command之前,Ruby会先处理command中的反斜杠逃逸符和展开式#{}。在命令返回之后,可以使用$?变量来查看子进程PID和返回值:

command = "ls"
ret = `#{command}`
puts "$?"

输出:
pid 24331 exit 0

2. %x命令输出表示法

%x!command!同`command`的功能一样,其中!可以被任意非字母、数字的字符替换,比如%x(),%x**,甚至可以用换行符(回车)来替代!。%x表示法同样会处理command中的反斜杠和展开式

command = "ls"
ret = %x #{command} 

3. Kernel.system(cmd, [arg1, [arg2[, ...]]])

system(command)函数只能执行外部应用,却不会返回命令的输出,如果不需要命令的数出的话可以使用这种方法。system(command)返回的是子进程的结束状态,如果子进程正常退出(exit 0)则system返回true,否则返回false。同样可以利用$?来查看具体的返回值:

command = “touch a.rb"
ret = system(command)

4. Kernel.spawn(cmd, [arg1, [arg2[, ...]]])

同样是运行外部应用,spawn函数并不会等待子进程结束(1. 2. 3. 三种方法都会等待子进程结束),而是直接返回子进程的PID:

# a.rb 只有一行 puts "hello"
ret = spawn("ruby", "a.rb")
puts "R:#{ret}"

输出:
R:24524
hello

 

posted @ 2013-07-25 21:32  Zealoct  阅读(1738)  评论(0编辑  收藏  举报