gpt4 book ai didi

ruby - 在不捕获 STDOUT 或 STDERR 的情况下访问子进程的 STDIN

转载 作者:数据小太阳 更新时间:2023-10-29 08:09:18 27 4
gpt4 key购买 nike

在 Ruby 中,是否可以防止生成的子进程的标准输入附加到终端而不必捕获相同的 STDOUTSTDERR过程?

  • 反引号和 x 字符串(`...`%x{...})不起作用,因为它们捕获 STDIN。

  • Kernel#system 不起作用,因为它使 STDIN 附加到终端(它拦截像 ^C 这样的信号并阻止它们达到我的程序,这是我试图避免的)。

  • Open3 不起作用,因为它的方法捕获 STDOUTSTDOUTSTDERR

那我应该用什么?

最佳答案

如果您在支持它的平台上,您可以使用 pipe 执行此操作, forkexec :

# create a pipe
read_io, write_io = IO.pipe

child = fork do
# in child

# close the write end of the pipe
write_io.close

# change our stdin to be the read end of the pipe
STDIN.reopen(read_io)

# exec the desired command which will keep the stdin just set
exec 'the_child_process_command'
end

# in parent

# close read end of pipe
read_io.close

# write what we want to the pipe, it will be sent to childs stdin
write_io.write "this will go to child processes stdin"
write_io.close

Process.wait child

关于ruby - 在不捕获 STDOUT 或 STDERR 的情况下访问子进程的 STDIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469773/

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