Ruby «File.open» не работает, если запущен через командную строку Windows или терминал Linux (без ошибок) - PullRequest
0 голосов
/ 26 июня 2018

У меня есть эта Ruby-программа, которую я создал под Windows 7. Через несколько этапов мне нужно создать пару файлов, поэтому я использую следующий фрагмент кода:

File.open('my_file.txt', "w") {|file| file.puts 'the stuff I want to put inside' }

Это работает довольно хорошо, если я запускаю программу, дважды щелкнув по ней, но не работает, если я запускаю ее через командную строку. Я не получаю ошибки, хотя. Программа работает нормально. Кажется, он просто пропускает метод File.open, и поэтому он не создает никакого файла, а затем продолжает проходить через остальную часть программы. Я убедился в этом, создав цикл создания файла вместе со строкой:

puts "whatever"

Цикл работает правильно: я выводил на экран «все» тысячи раз в секунду, как и ожидалось, но файл все равно не создается.

Теперь я должен сказать вам, что у меня была эта проблема в течение нескольких недель, и я никогда не находил ее решения, но это не слишком беспокоило меня, так как все работало нормально, когда я просто запустил программу, дважды щелкнув по ней вместо запуска через командную строку.

Однако теперь мне нужно использовать его на Raspbian (на Raspberry Pi Zero W), и у меня возникает та же проблема при запуске через терминал, но я не знаю другого способа запуска программы Ruby в Linux.

Вот полный требуемый код:

require 'io/console'

loop do
    hidden_data = '{"hidden_data":"true"}'
    File.open('hidden_data.json', "w") {|file| file.puts hidden_data }

    puts "Insert your password:"

    password = STDIN.noecho(&:gets).chomp

    if password == "1234"
        hidden_data = '{"hidden_data":"false"}'
        File.open('hidden_data.json', "w") {|file| file.puts hidden_data }
        puts "Access granted"
        sleep 60
    else
        puts "Wrong password"
    end
end
...