2011-08-03 79 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}`