Ruby:File.open奇怪的行为,变量为文件名

时间:2018-06-19 16:50:22

标签: ruby file

Ruby Noob在这里! 我正在尝试使用变量作为要创建的文件的名称来创建和写入ruby中的文件。如果使用文件名的类型,则它与另一个变量#{system}相同,但是问题似乎出在早期解析的特定变量上。 收到错误-Errno :: ENOENT:没有这样的文件或目录

array#record contains: 
Sun /log/schedule.log.20180617
Mon /log/schedule.log.20180618  
Tue /log/schedule.log.20180619
Wed /log/schedule.log.20180620
Wed /log/schedule.log

代码部分。

lines = record.split("\n")
lines.each do |line|
    log = /(\/.*schedule.log(?:\.20[0-9]{6})?)/.match(line)
    @cmd = "grep DEBUG #{log} | grep \"start\\|running\""
    rawdata = ssh.exec!(@cmd) 
    logfile = File.new("#{system}_#{log}", 'w+')
       logfile.puts rawdata
    logfile.close
end
ssh.close  

输出 收到错误-Errno :: ENOENT:没有这样的文件或目录-server1_schedule.log

所需的输出应创建少量具有命名约定<persystem_schedule.log<date>>的日志文件。

1 个答案:

答案 0 :(得分:1)

我很确定您没有提供足够的信息来解决问题,但是在这些情况下,我发现简化代码通常很有帮助;这样做经常会发现其他问题。

使用文件othersopenputs是否有原因?这增加了很多复杂性,我认为这是不必要的,并且复杂性可能掩盖了其他一些问题。我建议更改此:

close

像这样:

rawdata = ssh.exec!(@cmd) 
logfile = File.new("#{system}_#{log}", 'w+')
logfile.puts rawdata
logfile.close

查看结果是否发生变化或是否显示出其他问题。