草庐IT

low-level-io

全部标签

ruby - 如何获取使用 IO.popen 调用的命令的退出状态?

我正在使用IO.popen执行命令并像这样捕获输出:process=IO.popen("sudo-uservice_user-istart_service.sh")do|io|whileline=io.getsline.chomp!process_log_line(line)endend如何捕获*start_service.sh*的退出状态? 最佳答案 您可以通过引用$?捕获通过IO.open()调用的命令的退出状态,只要您关闭了block末尾的管道即可。在上面的例子中,你会这样做:process=IO.popen("sudo-us

ruby-on-rails - FactoryGirl 关联模型故障 : "SystemStackError: stack level too deep"

我正在使用RubyonRails3.0.9、RSpec-rails2和FactoryGirl。我正在尝试陈述一个工厂协会模型,但我遇到了麻烦。我有一个factories/user.rb文件,如下所示:FactoryGirl.definedofactory:user,:class=>Userdoattribute_1attribute_2...association:account,:factory=>:users_account,:method=>:build,:email=>'foo@bar.com'endend和一个factories/users/account.rb文件,如下所示

ruby-on-rails - 阻塞 IO/Ruby on Rails

我正在考虑使用Rails编写Web应用程序。用户发出的每个请求都取决于调用的外部API。这个外部API可能随机地非常慢(2-3秒),因此显然这会影响单个请求。在代码等待外部API返回的这段时间里,是否会阻塞进一步的用户请求?只是为了进一步澄清,因为似乎有些困惑,这是我期待的模型:Alice向我的网络应用程序发出请求。为此,调用API服务器A。API服务器A很慢,需要3秒才能完成。在Rails应用程序调用API服务器A的这段等待时间内,Bob发出了一个请求,该请求必须向API服务器B发出请求。Ruby(1.9.3)解释器(或Rails3.x框架中的某些东西)是否会阻止Bob的请求,要求他

ruby 迷你测试 : Suite- or Class- level setup?

使用内置的RubyMinitest框架,有没有办法在整个套件运行之前运行一些代码,甚至在整个TestClass运行之前运行一次?我在thisquestion的答案中看到Test::Unit::after_tests可用于在运行所有测试后运行代码;是否有类似的方法在所有测试运行之前运行代码?我想使用此功能在测试运行前初始化测试数据库,并在测试全部运行后将其拆除。谢谢! 最佳答案 这是从MiniTest修改而来的docs(在可自定义的测试运行器类型下)。classBurgerdefinitializeputs"YOUCREATEDABU

ruby - “Stack level too deep” 运行 rake 数据库 :create:all

当我运行rakedb:create:all时,我收到以下消息:/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/version.rb:4:warning:alreadyinitializedconstantMAJOR/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/version.rb:5:warning:alreadyinitializedconstantMINOR/Users/junior/.rv

ruby - 实现 Ruby 的 IO.popen() 和 system() 的替代品

Ruby中的IO.popen()和system()严重缺乏一些有用的功能,例如:获取函数的返回值同时捕获stdout和stderr(单独和合并)在不产生额外的cmd.exe或/bin/sh进程的情况下运行Python有一个模块“subprocess”,我正在考虑将其用作Ruby中类似模块的灵感。现在回答问题:Ruby程序员如何解决上述问题,例如在执行popen()调用时获取返回值?这是否已经实现? 最佳答案 看看标准的Ruby库open3.这将使您能够访问标准输入、标准输出和标准错误。还有一个名为open4的外部项目,它允许您在不使

ruby - 是否有一种简单的方法来检查 Ruby IO 实例是否会阻塞 read()?

我正在寻找一种Ruby中的方法,基本上是这样的:io.ready_for_read?我只想检查给定的IO对象(在我的例子中是popen调用的结果)是否有可用的输出,即后续调用io.read(1)不会阻塞。这是我看到的两个选项,我都不喜欢:io.read_nonblock-Unixread()的抽象太薄了-我不想处理errno错误处理。io.selectwithtimeout0--混淆了这个简单操作的目的。有没有我忽略的更好的选择? 最佳答案 有点晚了,但是如果您需要'io/wait',您可以使用ready?来验证IO是否可以无阻塞地

ruby-on-rails - 为什么我的 rails3 beta4 模型中出现 "SystemStackError: stack level too deep"

在ruby1.9.2-rc1rails3beta4中执行以下代码时,出现以下错误:SystemStackError:stackleveltoodeep/:ruby-1.9.2-rc1>f=Forum.all.first=>#ruby-1.9.2-rc1>f.children=>[#]ruby-1.9.2-rc1>f.forum_type="thread"=>"thread"ruby-1.9.2-rc1>f.saveSystemStackError:stackleveltoodeepfrom/Users/emilkampp/.rvm/rubies/ruby-1.9.2-rc1/lib/r

ruby - 在 Ruby 中读取套接字时理解 IO.select

我有一些代码用于从网络套接字获取数据。它工作正常,但我通过反复试验失败了。我谦虚地承认我并不完全了解它是如何工作的,但我真的很想了解。(这是我发现的cargo崇拜形式的工作代码)我不明白的部分以“ready=IO.select...”开头,我不清楚:IO.select正在做什么(我尝试查找它,但对Kernel和其他东西更加困惑)IO.select的数组参数是做什么用的ready[0]正在做什么读取1024字节的大致思路?一次代码如下:@mysocket=TCPSocket.new('192.168.1.1',9761)th=Thread.newdowhiletrueready=IO.s

ruby - 如何将 IO 对象转换为 Ruby 中的字符串?

我正在处理一个IO对象(一些STDOUT输出文本),并且我正在尝试将它转换为一个字符串,以便我可以进行一些文本处理。我想做这样的事情:my_io_object=$stdout#=>#>my_io_object.puts('hi')#note:Iknowhowtomake'hi'intoastring,butthisisasimplifiedexample#=>himy_io_object.to_s我已经尝试了一些东西并得到了一些错误:my_io_object.read#=>IOError:notopenedforreadingmy_io_object.open#=>NoMethodEr