gpt4 book ai didi

ruby - 何时使用在 Ruby 中启动子进程的每种方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:20:20 25 4
gpt4 key购买 nike

1。 `` 反引号

1。 a) %x{} 百分比 X < 反引号的替代语法

2。 系统()

3。 fork()

4。 打开()

4.a. IO.popen() <行为与open()

相同

4.b. 打开("|-")

  • 叉到管道

4.c. IO.popen("-") < 与 open("|-") 的行为相同

5。 Open3.popen3()

  • 需要'open3'
  • 标准库 Open3

6。 PTY.spawn()

  • 需要'pty'
  • 标准库 PTY

7. Shell.transact()

  • 需要'shell'
  • 标准库 Shell

什么时候应该放弃可信赖的反引号,转而采用一种更复杂的方法?

编辑 1.非常感谢 Avdi Grimm他的帖子描述了每种方法的示例用法:#1 (& gist ); #2 (& gist ); #3 .

它们是回答如何的绝佳资源,但并没有明确地回答应该何时使用为什么等恕我直言,这个问题没有完整的答案。

最佳答案

  1. 如果您想轻松地在变量中捕获程序的输出,请使用反引号。您可能只想将它用于短期运行的程序,因为这会阻塞。

  2. system 在两种不同的情况下很方便:

    一个。您有一个长时间运行的程序,并且希望在运行时打印输出(例如 system("tar zxvf some_big_tarball.tar.gz"))

    system 可以像exec一样绕过shell扩展(比较system "echo *"system "echo", "* ")

    系统阻塞,直到子进程退出。

  3. fork 也有几个不同的用例:

    一个。您想在单独的进程中运行一些 ruby​​ 代码(例如 fork { .... }

    你想运行一个子进程(或不同的程序)而不阻止你的脚本 fork { exec "bash"} 的进程。

    如果您想守护程序,

    fork 是您的好 helper 。

  4. 当您需要与程序的标准输出和标准输入交互时,
  5. IO.popen 很有用。请注意,它不捕获标准错误,因此如果您关心它,则需要使用 2>&1 重定向它。

  6. popen3 为标准错误提供了一个单独的文件描述符(当您需要从标准输出中单独捕获它时)

  7. PTY.spawn 当您希望生成的程序表现得像您从终端运行时,这是必需的。查看使用 system 生成时 grep --color=auto pat filePTY.spawn

  8. 的区别

关于ruby - 何时使用在 Ruby 中启动子进程的每种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com