ruby执行系统命令

作者:周星 发布:2017-10-07

       众所周知 ruby 是一门脚本语言,我们可以用它很方便的写一些系统脚本,比如最近网上沸沸扬扬的黑客曝光好莱坞明星图片(你懂的),在别人还在各种求种子的时候,我们可以写了一个抓取脚本先分析出图片的地址然后全部 wget 下来,今天给大家分享如何在 ruby 脚本中执行系统命令。

1. 最简单常用的,使用 ` 符号, ` 符号就一般在键盘的左上角 ESC 键的下方,把需要执行的命令放在 ` 中间即可,`把字符串当做外部程序命令来运行,并以字符串形式返回命令的输出:

`mkdir xxx && echo hello`

2. 第二种方法用的不多,使用 %x,它等同于方法1:

%x(mkdir test && echo hello)

上面的两种方法执行结果会返回 stdout,然后重定向程序的 stderr。如果不懂可以试一试。

3.还有一种方法,使用 system 方法,它的执行结果是 true or false:

system 'mkdir test & echo hello'

4.使用 exec,这种方法和其它方法的最大区别是:它的执行会覆盖掉当前进程,然后退出脚本的执行,而且你不会知道命令是否执行成功。

exec 'echo hello'
exec 'echo world'
# 屏幕上只会打印 hello,后面的代码都不会执行

5. ruby1.9特性 spawn,它基本上等同于 system 方法,但是它不会等待子进程的结束,它的返回结果是生成子进程的进程 ID,猜猜看下面的程序输出结果。

spawn 'sleep 1; echo one' 
spawn 'echo two'
sleep 2

6. popen 方法是在子进程中执行命令的另一种方法,它会给你更多的控制,它的标准输出和标准输入都会关联到 IO。也就是说,它允许你在执行系统命令时输入一些东西。

io = IO.popen 'cat', 'r+'
$stdout = io
puts 'hi'
$stdout = IO.new 0
p io.read(1)
io.close

7. 使用 Open3 类,Ruby 标准库中包含 Open3类,它易用,并且能返回 stdout, stderr等,它比 popen 方法更强大,因为它允许你访问 stderr,具体使用例子就不给出了,大家可以查看一下文档。

如果您对本文有什么意见或建议,请联系博主。

支付宝扫码赞助博主


评论(0)