2014-01-18 4 views
0

Инструмент командной строки, который я пытаюсь вызвать, в основном преобразует файл в другой формат.Вызов инструмента командной строки с использованием Ruby

Я следую за этим [учебником] [1], но нахожусь в беде. Я продолжаю получать invalid multibyte char (UTF-8) (SyntaxError)

Я просто сбрасываю свой инструмент командной строки (сделанный с помощью C) в ящик и пытаюсь заставить его работать. Может ли кто-то пролить свет на то, как я могу заставить это работать?

+1

Вы пытаетесь создать драгоценный камень? Какую версию рубина вы используете? Можете ли вы дать нам реальный пример того, как работает этот инструмент и почему вы хотите вызвать рубиновый скрипт? –

+0

@atmosx см. Мое редактирование – goo

+0

Теперь я понимаю, что вы делаете, но ... Это небезопасно. Я не думаю, что люди будут использовать предварительно скомпилированный бинарный файл C в своих системах. –

ответ

3

Ошибка, которую вы получаете, связана с кодировкой UTF-8, которая является кодировкой по умолчанию в ruby-2.x, поэтому я предполагаю, что вы используете 1,8 или 1,9, и вам стоит рассмотреть возможность обновления.

Попробуйте добавить следующие строки в верхней части скрипта:

#!/bin/env ruby 
# encoding: utf-8 

Дайте нам знать, если он работает, и посмотреть на this thread for more.

EDIT: Теперь я понял, что вы хотите сделать. Посмотрите here для примера файла, который находится в каталоге bin/. Вы можете поместить свой исполняемый файл в другой каталог, как data/, например, и звонить через рубин:

#!/usr/bin/env ruby 

prog = File.expand_path('../data/myprog', __FILE__) 
ARGV.each do|a| 
    system("#{prog} #{a}") # will return 'true' if run successfully 
end 

Okay попробовать прямо сейчас. Это должно работать с несколькими файлами, также, как и

прог file1.doc file2.doc ...

+0

Спасибо за ответ, см. Мое редактирование. Я попытался добавить кодировку, но она все еще не работает – goo

+0

Хорошо, я тоже отредактировал свой ответ. –

+0

Спасибо. Вы заявили, что это было небезопасно - почему? Как я могу сделать его более безопасным? (У меня также есть оригинальный Makefile) – goo

1

чтения the document и the document о том, как сделать C мягкий совместим с рубин, пожалуйста.

Некоторые примечания:

  1. Поместите все файлы в соответствующих папках для драгоценного камня;
  2. Изготовитель драгоценного камня extconf Совместимость;
  3. Не помещайте скомпилированные двоичные файлы в GitHub источник (в некоторых ограниченных случаях могут быть сохранены предварительно скомпилированные двоичные файлы для ). ОС Windows может быть сохранен);
  4. Если вы не написать OpenSource проект, не публикуйте его в GitHub, вместо того, чтобы его использовать Bitbucket и Localhost (не Rubygems.org), чтобы сохранить драгоценный камень.
+0

Спасибо за ссылки и заметки (толкнул, чтобы помочь объяснить только то, что я пытался сделать). По какой-то причине я не смог получить доступ к первой ссылке, но я просмотрю вторую – goo

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