原文来自: http://blackanger.blog.51cto.com/140924/43730
碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法
1.Exec方法
Kernel#exec方法通过调用指定的命令取代当前进程:
>>exec 'echo "hello $HOSTNAME"'
hello nate.local
值得注意的是,exec方法用echo命令来取代了irb进程从而退出了irb。主要的缺点是,你无法从你的ruby脚本里知道这个命令是成功还是失败。
2.System方法
Kernel#system方法操作命令同上, 但是它是运行一个子shell来避免覆盖当前进程。如果命令执行成功则返回true,否则返回false。
>> 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
分享到:
相关推荐
碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法: 1.Exec方法: Kernel#exec方法通过调用指定的命令取代当前进程例子: 代码如下: $ irb >> exec ‘echo “hello $HOSTNAME”‘ ...
在Ruby中,执行shell命令是一件不奇怪的事情,Ruby提供了大概6种方法供开发者进行实现。这些方法都很简单,本文将具体介绍一下如何在Ruby脚本中进行调用终端命令。 exec exec会将指定的命令替换掉当前进程中的操作,...
Ruby的case表达式有两种形式: 第一种形式接近于一组连续的if语句:它让你列出一组条件,并执行第... 您可能感兴趣的文章:Ruby面向对象编程详解Ruby中调用执行shell命令的6种方法优化Ruby代码使程序运行速度提高的例子
守望者- V0.9 同时在多台机器上(从Ruby)安全地运行SSH命令。 受到启发,并与Ruby 1.8、1.9和JRuby 1.3+兼容! ... 通过调用Rye :: Box对象上的方法来执行Shell命令。 rbox = Rye :: Box . ne
强制执行显式错误处理且从不调用Shell的执行原语。 如何使用 该接口类似于Open3.capture2e。 我们在运行命令之前将命令打印到stdout(除非:quiet=> true )。 默认情况下,命令进程共享调用进程的标准输出,但是可以...
再说,即便是操作系统,最简单的指令多个执行,最终是不是还不如自己积累最严谨的语言,写好并调试好一段Shell来执行更保险呢? 而脚本语言始终还是有一些做不到的地方,工业级的应用,经历了那么多年的洗练。 远程...
命令生成器command-builder通过简单而优雅的方式从shell生成可运行的命令。 还允许使用同步执行或异步执行。 这是调用jpegoptim的真实示例: require "command-builder"cmd = CommandBuilder :: new ( :jpegoptim )...
另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...
要安装wasmer Ruby gem,只需在您的shell中运行以下命令: $ gem install wasmer 。 例 在examples/simple.rs有一个玩具程序,用Rust(或编译成WebAssembly的任何其他语言)编写: #[no_mangle] pub extern fn ...
可执行文件 Rexe是Ruby脚本和gem,它通过以下方式将Ruby在命令行中的有用性和简洁性倍增: ... 不幸的是,当要调用多个OS命令时,Ruby也可能很笨拙。 有时,一个好的解决方案是在同一命令行上结合
1.能够调用定义的方法,如help 2.能够执行系统命令 3.能够类似irb/pry进行ruby语言解析 安装: gem install ripl gem install ripl-shell_commands 示例 ripl这个gem,它也提供很多插件,如下是一个简单的终端下...
调用hash -r清除命令查找哈希表。 Ruby名称的模糊匹配。 默认为系统Ruby。 (可选)支持自动切换和.ruby-version文件。 支持和 。 小(〜100 LOC)。 有测试。反特征不钩cd 。 不要安装可执行垫片,也不需要在安装...
Vebugger 目前支持: 在源代码中跟踪当前执行的命令调试器流程命令 - 步入、设置、设置和继续断点管理评估当前执行范围内的表达式弄乱程序的状态(改变值,调用函数) Vebugger 构建为用于为交互式 shell 调试器...
另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...
另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...
另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...
另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...
另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...
另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...
Pianobar 允许在事件发生时执行 shell 命令,例如更改歌曲、喜欢歌曲、禁止歌曲或更改电台。 我们的用例是 Raspberry Pi,之前我们有一个 Ruby 脚本发布 Hipchat 通知。 在 Ruby VM 启动、脚本发出 HTTP 请求然后...