提问人:Aparichith 提问时间:11/4/2022 最后编辑:Aparichith 更新时间:11/4/2022 访问量:66
如何在不达到EOF的情况下读取IO流?
How to read IO stream without reaching EOF?
问:
在我正在使用的旧应用程序之一中,我们正试图通过实用程序获取提取的zip文件名。这分为两个命令。第一个命令解压缩压缩文件,第二个命令尝试列出并 grep 具有特定扩展名的文件名。但最近我们在读取 IO 缓冲区时开始遇到错误。Open3
# unzip with 7z
Open3.capture3("7z", "x", my_zip.path, "-p#{my_pass}", "-o#{tmp_dir}")
# extract file name with .dbf extension
resp, _threads = Open3.pipeline_r(["7z", "-slt", "l", "-p#{my_pass}", my_zip.path], ["grep", "-oP", "(?<=Path = ).+dbf"])
# read IO stream for filename
res_filename = resp.readline.strip
# close stream
# resp.close
在我们正在 enoutering .我试图使用而不是避免,但它会导致空/零值。resp.readline.strip
EOFError
::gets
readline
EOFError
我错过了什么?有没有办法将 IO 流转换为 String 对象或类似的东西?
观察到这在控制台上工作正常,但在从 sidekiq 仪表板调用作业时引发异常
答: 暂无答案
评论
EOFError
:gets
而不是readline
来避免EOFError
”——与其让错误沉默,不如首先尝试找出它发生的原因。 表示您的输入为空,即您的管道命令不会生成任何输出。EOFError