Вы можете перенаправить stderr на стандартный вывод:
command_name 2>&1
Насколько я помню, это возможно в Си с использованием труб.
ОБНОВЛЕНИЕ: О, извините - пропустил часть о способности различать два. Я знаю, что TextMate сделал это каким-то образом, используя своего рода код, видимый пользователю ... Давненько не искал, но я посмотрю. Но, подумав, не могли бы вы использовать что-то вроде Open3
в Ruby? Вам нужно будет одновременно смотреть и STDOUT
, и STDERR
, но на самом деле никто не должен ожидать определенного порядка вывода этих двух.
ОБНОВЛЕНИЕ 2: Пример того, что я имел в виду в Ruby:
require 'open3'
Open3.popen3('ruby print3.rb') do |stdin, stdout, stderr|
loop do
puts stdout.gets
puts stderr.gets
end
end
... где print3.rb
просто:
loop do
$stdout.puts 'hello from stdout'
$stderr.puts 'hello from stderr'
end
Вместо вывода результата прямо в puts
, вы можете отправить сообщение наблюдателю, которое распечатает его в вашей программе. Извините, у меня нет Windows на этой машине (или какой-либо сразу доступной), но я надеюсь, что это иллюстрирует концепцию.