Копирование потока ввода-вывода приводит к повреждению - PullRequest
0 голосов
/ 06 мая 2010

У меня есть небольшой веб-сервер Mongrel, который отправляет вывод процесса в ответ http:

response.start(200) do |head,out|
  head["Content-Type"] = "text/html"
  status = POpen4::popen4(command) do |stdout, stderr, stdin, pid|
    stdin.close()
    FileUtils.copy_stream(stdout, out)
    FileUtils.copy_stream(stderr, out)
    puts "Sent response."
  end
end

Это работает хорошо в большинстве случаев, но иногда символы дублируются. Например, вот что я получаю из команды "man ls":

LS(1)                            User Commands                           LS(1)



NNAAMMEE
       ls - list directory contents

SSYYNNOOPPSSIISS
       llss [_O_P_T_I_O_N]... [_F_I_L_E]...

DDEESSCCRRIIPPTTIIOONN
       List  information  about  the FILEs (the current directory by default).
       Sort entries alphabetically if none of --ccffttuuvvSSUUXX nor ----ssoorrtt.

       Mandatory arguments to long options are  mandatory  for  short  options

По какой-то загадочной причине заглавные буквы дублируются. Кто-нибудь может объяснить, что происходит?

1 Ответ

2 голосов
/ 07 мая 2010

Это фактический результат man. Дублированные символы, которые вы видите (и некоторые другие, которые вы не видите, например, символ возврата на одну позицию) используются для форматирования вывода при отображении в консоли, например подчеркивания текста и т. Д.

Чтобы отфильтровать эти символы форматирования, взгляните на Как получить справочную страницу в виде простого текста без всего этого материала ^ H ^ _? на страницах руководства Linux HOWTO.

Кстати, я не уверен, что text/html - это правильный тип пантомимы для этого вида вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...