我想通过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的新手,目前正尝试与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 strftime有一个没有前导零的月份格式吗?
我找到 %e了没有领先零的一天,但没有任何运气与月.
最终想要一个格式如下的日期: 9/1/2010
我需要使用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中使用字符串插值的正确方法如下:
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中都尝试过这一点.
为什么这样做?口译员在这做什么?
我应该如何检查字符串是否以给定字符串开头或结尾?似乎没有任何内置方法可用(或者它可能只是我正在使用的IDE没有显示:RDE)
我有一系列的哈希像这样:
[{"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的新手,但在尝试安装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) 我使用Rails 3.0.20和ruby 1.8.7(2011-06-30 patchlevel 352)
请建议我生成guid的最佳插件.