gpt4 book ai didi

ruby - 执行需要交互式输入的 ruby​​ 子进程

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:11 25 4
gpt4 key购买 nike

我需要从 ruby​​ 启动一个子进程,它接管然后返回控制权。这个子进程需要来自用户的交互式输入,所以它的 io 应该绑定(bind)到 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 程序的一般信息、处理进度等。

! 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:

在程序等待用户输入内容的三个时间点中的每一个位置。

最佳答案

您可以将 forkexec 配对:

Process.fork { exec('./somescript') }
Process.wait

Process.wait 确保您等待子进程完成。

关于ruby - 执行需要交互式输入的 ruby​​ 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16381587/

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