我正在使用Ruby中的系统命令转换XLS 2 CSV文件.
在转换之后,我正在处理CSV文件,但是当程序想要处理文件时,转换仍在运行,因此那时它们不存在.
有人能告诉我是否可以让Ruby等待系统命令完成所需的时间?
现在我正在使用:
sleep 20
Run Code Online (Sandbox Code Playgroud)
但如果它需要更长的时间,那当然是不对的.
我具体做的是:
#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
Run Code Online (Sandbox Code Playgroud)
Aar*_*ter 17
Ruby的system("...")方法是同步的; 即它等待它调用的命令返回退出代码,system如果命令以0状态退出则返回true,如果以非0状态退出则返回false.Ruby的反引号返回了命令的输出:
a = `ls`
Run Code Online (Sandbox Code Playgroud)
将设置a为包含当前工作目录列表的字符串.
因此,似乎xls2csv.exe在完成它应该执行的操作之前返回退出代码.也许这是一个Windows问题.所以看起来你必须循环直到文件存在:
until File.exist?("file1.csv")
sleep 1
end
Run Code Online (Sandbox Code Playgroud)
小智 0
尝试使用线程:
command = Thread.new do
system('ruby programm.rb') # long-long programm
end
command.join # main programm waiting for thread
puts "command complete"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15606 次 |
| 最近记录: |