Ale*_*ski 60 ruby performance standards subprocess coding-style
``
Backtick%x{}
百分比X <Backtick的替代语法system()
fork()
open()
IO.popen()
<表现相同open()
open("|-")
IO.popen("-")
<表现相同open("|-")
Open3.popen3()
require 'open3'
PTY.spawn()
require 'pty'
Shell.transact()
require 'shell'
编辑1. 非常感谢Avdi Grimm的帖子描述了每种方法的示例用法:#1(&gist); #2(&gist); #3.
他们是很好的资源来回答如何,但没有明确的组成来回答每个应该使用或为什么,并因此恕我直言这个问题不完整的答案.
cam*_*cam 48
如果想要在变量中轻松捕获程序的输出,请使用反引号.你可能只想将它用于短期运行程序,因为这会阻塞.
system
在两种不同的情况下很方便:
一个.你有一个长时间运行的程序,你希望输出在运行时打印(例如system("tar zxvf some_big_tarball.tar.gz")
)
湾 system
可以绕过外壳膨胀等exec
(比较器的输出system "echo *"
和system "echo", "*"
)
系统阻塞,直到子进程退出.
fork
还有几个不同的用例:
一个.您希望在单独的进程中运行一些ruby代码(例如fork { .... }
湾 您希望在不阻止脚本进度的情况下运行子进程(或其他程序)fork { exec "bash" }
.
fork
如果你想要守护你的程序,你的朋友是你的朋友.
IO.popen
当您需要与程序的标准输出和标准交互时,它非常有用.请注意,它不会捕获标准错误,因此2>&1
如果您关心它,则需要将其重定向.
popen3
为标准错误提供单独的文件描述符(当您需要从标准输出中单独捕获时)
PTY.spawn
当您希望生成的程序表现得像从终端运行时,则是必需的.看看grep --color=auto pat file
与system
vs 产生时的差异PTY.spawn
归档时间: |
|
查看次数: |
8120 次 |
最近记录: |