红宝石线程不等

时间:2012-10-23 09:50:03

标签: ruby multithreading

在ruby中我想执行一些生成文件的本地命令,然后我想读取文件的内容,然后修改它。

但是我总是得到空。

这是代码:

exec "java -jar xx.jar --output main.txt";
content=IO.read('main.txt');
content="somethinkg:"+content;
File.open('main.txt','w') do |f|
  f.puts content
end

生成了main.txt,但我无法修改内容。

然后我认为它可能是由线程引起的,当正在读取main.txt时,java命令未完成,因此内容为空。

然后我尝试了这个:

t=Thread.new do
  exec "java -jar xx.jar --output main.txt";
end
t.join
content=IO.read('main.txt');
puts content
content="somethinkg:"+content;
File.open('main.txt','w') do |f|
  f.puts content
end

然而没有任何改变,我仍然无法获得内容。

有什么问题?

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是exec命令如果你检查exec上的ruby文档 超过here

exec之后的代码永远不会执行

所以

t=Thread.new do
  exec "java -jar xx.jar --output main.txt";
end

所以你的代码在此之后永远不会运行任何东西

尝试使用系统或反引号命令

类似这样的事情

t=Thread.new do
  system "java -jar xx.jar --output main.txt";
end
t.join
content=IO.read('main.txt');
puts content
content="somethinkg:"+content;
File.open('main.txt','w') do |f|
  f.puts content
end

希望有所帮助