2012-10-23 45 views
0

在ruby中,我想执行一些本地命令,它会生成一个文件,然后我想读取文件的内容并对其进行修改。ruby​​ thread不等待

但是我总是得到空。

这是代码:

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

尝试没有'exec' Exec之后没有代码每隔因为EXEC交换执行内存试试系统或反引号操作符 – Viren

+0

@Viren这听起来正确的 - 你应该添加它作为答案,我是基地的方式:) –

+0

@Viren:使用'system(“java ...”)'而不是? – hguser

回答

0

我觉得在这里的问题是exec命令如果检查EXEC 红宝石文档超过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 

希望它能帮助

+0

谢谢,我会试一试。 – hguser

+0

为什么要打扰线程?系统块直到子进程退出。 – Catnapper

+0

@Catnapper我知道,但我不知道是代码的唯一部分还是有其他的东西,因此我从来没有建议它,因为他在'multithread'中标记问题 – Viren