如何等待系统命令结束

时间:2010-05-26 06:16:05

标签: ruby

我正在使用Ruby中的系统命令转换XLS 2 CSV文件。

转换后我正在处理CSV文件,但当程序要处理文件时转换仍在运行,所以当时它们不存在。

有人可以告诉我是否可以让Ruby等待系统命令完成所需的时间?

现在我正在使用:

sleep 20

但是如果它需要更长的时间,那当然是不对的。

我具体做的是:

#Call on the program to convert xls
command = "C:/Development/Tools/xls2csv/xls2csv.exe C:/TDLINK/file1.xls"
system(command)
do_stuff

def do_stuff
#This is where i use file1.csv, however, it isn't here yet
end

2 个答案:

答案 0 :(得分:16)

Ruby的system("...")方法是同步的;即它等待它调用的命令返回退出代码,如果命令以0状态退出,则system返回true,如果以非0状态退出,则返回false。 Ruby的反引号返回命令的输出:

a = `ls`

a设置为包含当前工作目录列表的字符串。

因此,似乎xls2csv.exe在完成它应该执行的操作之前返回退出代码。也许这是一个Windows问题。所以看起来你必须循环直到文件存在:

until File.exist?("file1.csv")
  sleep 1
end

答案 1 :(得分:1)

尝试使用线程:

command = Thread.new do
  system('ruby programm.rb') # long-long programm
end
command.join                 # main programm waiting for thread
puts "command complete"