Ruby中调用执行shell命令的6种方法_ruby专题教程-查字典教程网
Ruby中调用执行shell命令的6种方法
Ruby中调用执行shell命令的6种方法
发布时间:2016-12-28 来源:查字典编辑
摘要:碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法:1.Exec方法:Kernel#exec方法通过调用指定的...

碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法:

1.Exec方法:

Kernel#exec方法通过调用指定的命令取代当前进程例子:

复制代码 代码如下:

$ irb

>> exec 'echo "hello $HOSTNAME"'

hello nate.local

$

值得注意的是,exec方法用echo命令来取代了irb进程从而退出了irb。主要的缺点是,你无法从你的ruby脚本里知道这个命令是成功还是失败。

2.System方法

Kernel#system方法操作命令同上, 但是它是运行一个子shell来避免覆盖当前进程。如果命令执行成功则返回true,否则返回false。

复制代码 代码如下:

$ irb

>> system 'echo "hello $HOSTNAME"'

hello nate.local

=> true

>> system 'false'

=> false

>> puts $?

256

=> nil

>>

3.反引号(Backticks,Esc键下面那个键)

复制代码 代码如下:

$ irb

>> today = `date`

=> "Mon Mar 12 18:15:35 PDT 2007n"

>> $?

=> #<Process::Status: pid=25827,exited(0)>

>> $?.to_i

=> 0

这种方法是最普遍的用法了。它也是运行在一个子shell中。

4.IO#popen

复制代码 代码如下:

$ irb

>> IO.popen("date") { |f| puts f.gets }

Mon Mar 12 18:58:56 PDT 2007

=> nil

5.open3#popen3

复制代码 代码如下:

$ irb

>> stdin, stdout, stderr = Open3.popen3('dc')

=> [#<IO:0x6e5474>, #<IO:0x6e5438>, #<IO:0x6e53d4>]

>> stdin.puts(5)

=> nil

>> stdin.puts(10)

=> nil

>> stdin.puts("+")

=> nil

>> stdin.puts("p")

=> nil

>> stdout.gets

=> "15n"

6.Open4#popen4

复制代码 代码如下:

$ irb

>> require "open4"

=> true

>> pid, stdin, stdout, stderr = Open4::popen4 "false"

=> [26327, #<IO:0x6dff24>, #<IO:0x6dfee8>, #<IO:0x6dfe84>]

>> $?

=> nil

>> pid

=> 26327

>> ignored, status = Process::waitpid2 pid

=> [26327, #<Process::Status: pid=26327,exited(1)>]

>> status.to_i

=> 256

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新ruby专题学习
    热门ruby专题学习
    脚本专栏子分类