У меня есть эта 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