2017-02-15 33 views
0

Я использую библиотеку обуви для запуска куска кода ruby ​​и обнаружил, что он обрабатывает рубиновый код, который он запускает как входной файл, и, таким образом, не позволяет мне получать STDIN больше (поскольку ARGF разрешает ввод файлов ИЛИ STDIN, но, по-видимому, не оба).Получение и ввода файлов и STDIN из ARGF?

Есть ли все-таки переопределить это? Мне говорят, что perl, например, позволяет вам читать из STDIN после того, как буфер IO пуст.

Edit:

Я имел некоторый успех с «-» особого имени файла символ, который, по-видимому является сигналом для переключения на STDIN в командной строке.

Предыдущая форма вопроса: Разбиты ли ботинки ARGF?

Используя обычный Ruby, я могу читать либо файлы, либо Standard In с ARGF. С помощью обуви я могу читать только файлы. Все, что от стандартного, просто игнорируется. Он питается стандартным, или есть другой способ получить к нему доступ?

Примеры строк кода: либо отдельно в рубиновом файле, либо внутри приложения для обуви в обуви.

#ruby testargf.rb aus.txt is the same as ruby testargf.rb<aus.txt 
#but isn't in shoes. shoes only prints with the first input, not the second 
ARGF.each do |line| #readLine.each has same result 
    puts line 
end 

Или обувь:

#shoes testargfshoes.rb aus.txt should be the same as <aus.txt but isn't. 
Shoes.app(title: "File I/0 test",width:800,height:650) do 
    ARGF.each do |line| #readLine.each has same result 
     puts line 
     para line 
    end 
end 

В ретроспективе, я также вижу дальнейшее различие между обуви и Руби: обувь также выводит исходный код программы я бегу вместе с любым файлы, которые я передаю. Если я попытаюсь ввести файл в стандартный, ТОЛЬКО исходный код печатается.

Я предполагаю, что это означает, что приложение для обуви принимает мою программу в качестве входного сигнала, а затем не дезинфицирует (или как бы правильное слово) ввод, когда он передает его вместе с моим кодом. Это, похоже, усиливает мою гипотезу «Обувь ест стандартное в», поскольку она явно использует стандарт In для чего-то. Я предполагаю, что это может занять два файл подряд, но не один файл, а затем ссылка на стандарт в

Я могу подтвердить, что Рубин без обуви обеспечивает одинаковое поведение, если я смешиваю входной файл и STDIN с:.

ruby testargf.rb aus_simple.txt < testargf.rb 
+1

могли бы вы предоставить исполняемый пример? – Stefan

+0

Да. См. Отредактированный вопрос. – Jenny

+0

Убедитесь, что есть пробел после 'do' и indent, используя два пробела. –

ответ

0

У меня был некоторый успех с символом специального символа «-», который, по-видимому, является сигналом для переключения на STDIN в командной строке.

Пример использования:

shoes testargfshoes.rb - <aus_simple.txt 

Не пройти "-" без прохождения любого стандартного In, делает его повесить.

Найден ответ здесь: https://robots.thoughtbot.com/rubys-argf