我需要从 ruby 启动一个子进程,它接管然后返回控制权。这个子进程需要来自用户的交互式输入,所以它的 io 应该绑定到 stdin stdout 和 stderr。此外,它根据情况要求输入更改。
像这样的程序的一个例子是 TeX,我会在一个文件上启动它,但是在这个过程中 TeX 可能会遇到一个用户错误,它必须询问用户如何修复。
本质上,我正在寻找可重入版本的 exec。
附言
对于那些不能仔细阅读的人,让我重申一下。
此子流程需要用户的交互式输入
这意味着,如果 ruby 程序在 tty 中运行,则它的输出到 tty 而不是 Ruby 程序,它的输入来自 tty,而不是 Ruby 程序。
换句话说: 本质上我正在寻找一个可重入版本的 exec。
我以 TeX 为例,所以让我给你看一个例子。我在Sample Tex上找到了一块 TeX样本。我打算输入一个错误,但似乎我不必让它阻塞我的系统。将其保存在 sample1.tex、sample2.tex、sample3.tex 中。
现在我想运行这段 ruby 代码:
files=["sample1.tex","sample2.tex","sample3.tex"]
files.each{|file|
# It is really a latex command.
commmand_that_I_am_looking_for("latex #{file}")
}
当我运行这段代码时,我应该在终端中看到三倍的东西:
有关乳胶程序、处理进度等的一般信息。
! LaTeX Error: File `html.sty' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)
Enter file name:
在每三次程序等待用户输入内容的位置。