Ruby - код выполняется по-разному на Mac и Ubuntu - PullRequest
1 голос
/ 18 декабря 2011

У меня возникает странная функциональность при выполнении следующего кода на Mac и в установке Ubuntu.

Мой код устанавливает соединение с моим Arduino, который затем проверяет, подключен ли клиент (он успешно соединяется), и затем я использую код Ruby для отправки команды на мой Arduino через t.puts с использованием гема socket, который затем выводит все, что я посылаю, на последовательный выход, используя программное обеспечение Arduino. Это легкая часть.

Когда на Mac выполняется следующее, мой последовательный выводит следующее, что правильно:

{power, tv} # t.puts "{power, tv}"

Однако, когда тот же код выполняется в Ubuntu, я получаю следующее в последовательном выводе, как будто он пытается подключиться снова. Это не дает вышеупомянутый последовательный вывод, который это делает на Mac:

Connecting... # t.puts "{power, tv}" # Connecting... (text is actually coming from Arduino not the below code).

Я дважды проверил, что мой Arduino, IP, код и порт верны (к чему он подключается). Я просто не вижу причины, по которой выходные данные будут отличаться на Mac и Ubuntu.

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

#!/usr/bin/ruby

require "socket"

#Thread.new {

  begin
    puts "Connecting to 10.1.1.45..."
    t = TCPSocket.new("10.1.1.45", 80)
  rescue
    puts "error : #{$!}"
  else
    t.print "{power,tv}"
    t.close
    puts "Sent command..."
  end

#}

Имейте в виду, что я могу нормально подключиться к 10.1.1.45 (я могу PING и т. Д.), Так что реальный код Arduino здесь не виноват, насколько я знаю, потому что я тестирую это, подключая его к Mac и Ubuntu и выполнение точно такой же код выше. Не стесняйтесь задавать мне любые дополнительные вопросы, и я буду рад ответить на них как можно более подробно, чтобы помочь мне в моем пути.

Заранее спасибо.

1 Ответ

2 голосов
/ 18 декабря 2011

В ruby ​​puts - это просто метод объекта IOStream, и объект может быть изменен без вашего ведома.

Возможно, вы захотите попробовать это, чтобы посмотреть, решит ли это вашу проблему:

begin
  STDOUT.puts "Connecting..."
  t = TCPSocket.new("10.1.1.45", 80)
rescue
  STDOUT.puts "error : #{$!}"
else
  t.print "{power,tv}"
  t.close
  STDOUT.puts "Sent command..."
end

Возможно, на вашем новом сокете вызывается puts.

...