gpt4 book ai didi

ruby - 通过 `myapp | myscript.rb` 将标准输入管道传输到 ruby​​ 脚本

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

我有一个连续运行的应用程序,从服务器转储输出并将字符串发送到标准输出。我想用 Ruby 脚本处理这个输出。字符串以 \n 结尾。

例如,我正在尝试在命令行上运行:

myapp.exe |我的脚本.rb

...my_script.rb 定义为:

while $stdin.gets
puts $_
end

我最终将使用正则表达式处理字符串并显示一些摘要数据,但现在我只是尝试连接基本功能。当我运行上面的命令时,出现以下错误:

my_script.rb:1:in `gets': Bad file descriptor (Errno::EBADF)
from my_script.rb:1

我在 Windows Server 2003 R2 SP2 和 Ruby 1.8.6 上运行它。

如何在 Ruby 脚本中持续处理标准输入? (持续运行,就像不处理文件一样,但一直运行直到我杀死它。)

编辑:

在某种程度上,我能够完成这项工作。有几个问题阻碍了我。一方面,可能是使用 Ruby 处理来自另一个进程的管道输入 stdin doesn't work on Windows 2003R2 .下面 Adrian 建议的另一个方向是将我的脚本作为父进程运行,并使用 popen 作为 fork 连接到 myapp.exe编辑子进程。不幸的是,fork 没有在 Windows 中实现,所以这也不起作用。

终于可以下载了POpen4 ,一个在 Windows 上实现 popen 的 RubyGem。结合 Adrian 的建议,我能够编写这个脚本来执行我真正想要的操作——处理 myapp.exe 的输出:

文件:my_script.rb

require 'rubygems'
require 'popen4'

status =
POpen4::popen4("myapp.exe") do |stdout, stderr, stdin, pid|
puts pid
while s = stdout.gets
puts s
end

end

此脚本与 myapp.exe 的输出相呼应,这正是我想要的。

最佳答案

尝试只是简单的 gets,没有 $stdin。如果这不起作用,您可能必须使用 IO.popen 使用另一个 ruby​​ 脚本检查 myapp.exe 的输出是否存在不可打印的字符。

关于ruby - 通过 `myapp | myscript.rb` 将标准输入管道传输到 ruby​​ 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197543/

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