标签: ruby

在Ruby中连续读取外部进程的STDOUT

我想通过ruby脚本从命令行运行blender,然后逐行处理blender给出的输出以更新GUI中的进度条.混合器是我需要读取的stdout的外部进程并不重要.

当blender进程仍在运行时,我似乎无法捕获blender正常打印到shell的进度消息,并且我尝试了几种方法.搅拌机退出后,我似乎总是访问搅拌机的标准配置,而不是在它仍在运行时.

这是尝试失败的一个例子.它确实得到并打印了搅拌机输出的前25行,但只有在搅拌机过程退出后:

blender = nil
t = Thread.new do
  blender = open "| blender -b mball.blend -o //renders/ -F JPEG -x 1 -f 1"
end
puts "Blender is doing its job now..."
25.times { puts blender.gets}
Run Code Online (Sandbox Code Playgroud)

编辑:

为了使它更清晰一点,调用blender的命令会在shell中返回一个输出流,指示进度(第1-16部分已完成等).似乎任何"获取"输出的调用都会被阻止,直到混合器退出为止.问题是如何在blender仍在运行时访问此输出,因为blender将其输出打印到shell.

ruby shell stdin stdout process

84
推荐指数
3
解决办法
3万
查看次数

迭代ruby 1.8.6中的字符串的每个字符(each_char)

我是ruby的新手,目前正尝试与ruby中的基本字符串分别对每个字符进行操作.我正在使用ruby 1.8.6并想做类似的事情:

"ABCDEFG".each_char do |i|
  puts i
end
Run Code Online (Sandbox Code Playgroud)

这会产生一个未定义的方法`each_char'错误.

我期待看到垂直输出:

A
B
C
D
..etc
Run Code Online (Sandbox Code Playgroud)

each_char方法仅定义为1.9吗?我尝试使用普通each方法,但块只是将整个字符串输出到一行.我想办法如何做到这一点的唯一方法就是从头开始创建一个字符数组:

['A','B','C','D','...'].each do|i|
  puts i
end
Run Code Online (Sandbox Code Playgroud)

这输出所需的:

A
B
C
..etc
Run Code Online (Sandbox Code Playgroud)

是否有一种方法可以使用未修改的字符串开始实现此输出?

我认为Java等价物是:

for (int i = 0; i < aString.length(); i++){
  char currentChar = aString.charAt(i);
  System.out.println(currentChar);
}
Run Code Online (Sandbox Code Playgroud)

ruby string iterator

84
推荐指数
3
解决办法
10万
查看次数

Ruby的数组#转移有什么作用?

我很难理解Array类中的shift和unshift方法在​​Ruby中的作用.有人可以帮我理解他们做了什么吗?

ruby

84
推荐指数
3
解决办法
5万
查看次数

Ruby strftime:没有前导零的月份?

Ruby strftime有一个没有前导零的月份格式吗?

我找到 %e了没有领先零的一天,但没有任何运气与月.

最终想要一个格式如下的日期: 9/1/2010

ruby format date strftime

84
推荐指数
4
解决办法
4万
查看次数

没有时间的Rails DateTime.now

我需要使用DateTime.now来获取当前日期,并"剥离"时间.

例如,这显示了我想要的东西:DateTime.now => Sat, 19 Nov 2011 18:54:13 UTC +00:00

这说明我什么想要的:DateTime.now.some_operation => 2011-11-06 00:00:00 UTC

ruby datetime ruby-on-rails

84
推荐指数
5
解决办法
10万
查看次数

为什么在没有花括号的情况下,字符串插值在Ruby中工作?

在Ruby中使用字符串插值的正确方法如下:

name = "Ned Stark"
puts "Hello there, #{name}" #=> "Hello there, Ned Stark"
Run Code Online (Sandbox Code Playgroud)

这就是我打算一直使用它的方式.

但是,我注意到Ruby的字符串插值有些奇怪.我注意到字符串插值在Ruby中没有关于实例变量的花括号.例如:

@name = "Ned Stark"
puts "Hello there, #@name" #=> "Hello there, Ned Stark"
Run Code Online (Sandbox Code Playgroud)

尝试与非实例变量相同的东西不起作用.

name = "Ned Stark"
puts "Hello, there, #name" #=> "Hello there, #name"
Run Code Online (Sandbox Code Playgroud)

我在1.9.2和1.8.7中都尝试过这一点.

为什么这样做?口译员在这做什么?

ruby string-interpolation

84
推荐指数
1
解决办法
3万
查看次数

测试字符串是以另一个字符串开头还是结尾

我应该如何检查字符串是否以给定字符串开头或结尾?似乎没有任何内置方法可用(或者它可能只是我正在使用的IDE没有显示:RDE)

ruby string

84
推荐指数
2
解决办法
4万
查看次数

Rails将哈希数组映射到单个哈希

我有一系列的哈希像这样:

 [{"testPARAM1"=>"testVAL1"}, {"testPARAM2"=>"testVAL2"}]
Run Code Online (Sandbox Code Playgroud)

而我正在尝试将此映射到单个哈希,如下所示:

{"testPARAM2"=>"testVAL2", "testPARAM1"=>"testVAL1"}
Run Code Online (Sandbox Code Playgroud)

我已经实现了它

  par={}
  mitem["params"].each { |h| h.each {|k,v| par[k]=v} } 
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有可能以更惯用的方式做到这一点(最好不使用局部变量).

我怎样才能做到这一点?

ruby arrays hash ruby-on-rails

84
推荐指数
4
解决办法
4万
查看次数

安装gem capybara-webkit时出错

我是ruby的新手,但在尝试安装capybara以在我的系统上运行测试时,我收到以下错误.我在运行OSX

my_app$ gem install capybara-webkit
Building native extensions.  This could take a while...
ERROR:  Error installing capybara-webkit:
ERROR: Failed to build gem native extension.

/Users/joe/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb

Gem files will remain installed in /Users/joe/.rvm/gems/ruby-1.9.2-p290/gems/capybara-webkit-0.7.2 for inspection.
Results logged to /Users/joe/.rvm/gems/ruby-1.9.2-p290/gems/capybara-webkit-0.7.2/./gem_make.out
Run Code Online (Sandbox Code Playgroud)

这是gem_make.out的结果

/Users/joe/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
Run Code Online (Sandbox Code Playgroud)

ruby gem capybara

83
推荐指数
6
解决办法
4万
查看次数

我需要为我的rails应用程序生成uuid.我有哪些选择(宝石)?

我使用Rails 3.0.20和ruby 1.8.7(2011-06-30 patchlevel 352)

请建议我生成guid的最佳插件.

ruby uuid guid ruby-on-rails ruby-on-rails-3

83
推荐指数
2
解决办法
6万
查看次数