2011-08-03 67 views
0

我使用shell命令來壓縮ruby文件。然後我將壓縮文件上傳到服務器。 當我使用它在一個循環中,如:Ruby - 延遲ruby程序,直到shell命令執行完成

dump_files.each do |dump_file| 
    Open3.popen3("zip #{zip_file} #{dump_file}") 
end 

和上傳的dump_files數組中的最後一個文件中不存在上傳的zip文件,但它存在於本地文件。

我認爲這是因爲壓縮文件的時間延遲。 如何延遲我的ruby執行,直到zip命令執行完成?

+1

問題一定是別的。沒有什麼可以延遲的,因爲當你用反引號運行shell命令時,shell命令在* *完成之前不會返回到Ruby。嘗試「睡眠10」,你會看到。 – Casper

+0

此外,它似乎懷疑你的命令''zip ..「''使用雙引號。你應該運行'zip ...'。 – Casper

+0

對不起朋友,以前我使用Open3.popen3()來執行shell命令。現在,當我使用''而不是popen3()時它可以工作。非常感謝你 – Sayuj

回答

3

難道不應該被:

`zip "#{zip_file}"  "#{dump_file}"` 

(換句話說,你不拉拉鍊呢?)

+0

爲什麼?在命令行工作! – Sayuj

+0

@Sayuj:你實際上試圖調用名爲「zip zipfile dumpfile」的命令,而不是帶有參數的「zip」命令。刪除你的雙引號。 @Denis:他甚至在'#{}'周圍都不需要雙引號,因爲反引號操作符已經進行了字符串插值。 –

+0

是的。好的。 我的問題是拉鍊延遲 – Sayuj

0

使用``而不是popen3會解決這個問題

更換

Open3.popen3("zip #{zip_file} #{dump_file}") 

`zip #{zip_file} #{dump_file}`