我有一个小的Mongrel网络服务器,它将进程的stdout发送到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
出于某种神秘的原因,大写字母会重复。谁能解释一下发生了什么?
答案 0 :(得分:2)
这是man
的实际输出。在控制台中显示时,您看到的重复字符(以及其他一些您没有的字符,例如退格字符)用于格式化输出,例如下划线等文本。
要过滤掉这些格式化字符,请查看Linux Man Pages HOWTO中的How do I get a plain text man page without all that ^H^_ stuff?。
BTW,我不确定text/html
是否是这类输出的正确mimetype。