2012-10-23 46 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