我正在编写一些需要文件的代码,将该文件传递给几个二进制文件之一进行处理,并监视转换过程的错误.我在OSX上编写和测试了以下例程,但由于我不清楚的原因,linux出现故障.
#run the command,capture the output so it doesn't display PTY.spawn(command) {|r,w,pid| until r.eof? do ##mark puts r.readline end }
运行的命令变化很大,##标记处的代码已被简化为本地回显,以尝试调试问题.命令执行,脚本在终端中打印预期输出,然后抛出异常.
它在Debian系统上产生的错误是:Errno :: EIO(输入/输出错误 – / dev / pts / 0):
所有命令字符串我可以想出产生这个错误,当我运行代码没有本地回声块,它运行很好:
PTY.spawn(command) {|r,pid|}
在这两种情况下,命令本身都执行正常,但是似乎debian linux没有发送pty. PTY的文档页面和ruby-doc上的IO在这里似乎没有任何帮助.
有什么建议么?谢谢.
-vox-
解决方法
所以我不得不去阅读PTY图书馆的C源,以便对这里发生的事情感到非常满意.
Ruby PTY文档并没有真正说明in the source code的意见.
我的解决方案是将一个包装方法放在一起,并从需要的脚本中调用它.我也在等待进程的方法中确定退出并从$?:访问退出状态
# file: lib/safe_pty.rb require 'pty' module SafePty def self.spawn command,&block PTY.spawn(command) do |r,p| begin yield r,p rescue Errno::EIO ensure Process.wait p end end $?.exitstatus end end
这与PTY.spawn基本相同:
require 'safe_pty' exit_status = SafePty.spawn(command) do |r,pid| until r.eof? do logger.debug r.readline end end #test exit_status for zeroness
发现这是一个有效的回应,因为它完全没有文件的ruby-doc,我感到有点沮丧.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。