2011-10-21 3 views
1

Я пытаюсь сохранить вывод, который cURL возвращает при загрузке файла. Вот мой код:cURL Вывод в Ruby

$file = '/Users/newmedia/Desktop/test.mov' 
$credentials = '-u username:password ftp://upload.website.com' 

$upload = `/usr/bin/curl -T #{$file} #{$credentials}` 

# Return cURL response 
puts $upload 

Если передача успешна она ничего не возвращает (и это хорошо), но если это не он должен вернуть что-то вроде: curl: (67) Access denied: 530 (как это происходит в терминале).

Я знаю, что могу использовать $? для возврата числа, которое я могу использовать для подтверждения успеха или неудачи, но я хотел бы сохранить фактическое сообщение в журнале.

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

+0

Найден это сообщение в блоге на захват STDERR с рубиновыми обратными кавычками: http://www.weheartcode.com/2007/09/14/capturing-stderr-with-ruby-backticks/ 'из =«ourlinuxcmd 2> & 1 ''(заменить' обратными выводами) .... 2> и 1 бит сообщает оболочке перенаправить stderr на stdout – RGilkes

ответ

2

Во-первых, переменные с префиксом $ являются глобальными переменными в Ruby, которые могут быть или не быть такими, какие вы хотите (подсказка: обычно это последняя).

Теперь для вашей реальной проблемы: сообщение об ошибке curl записывается в stderr, но обратные записи возвращают только то, что написано на stdout.

Взгляните на следующем блоге:

http://tech.natemurray.com/2007/03/ruby-shell-commands.html

Что вам нужно либо IO#popen или Open3#popen3.

+0

Отличный ресурс. Благодаря! Я не мог использовать Open3 # popen3, потому что он не дожидается статуса возврата. – RGilkes

Смежные вопросы