Лучший способ чтения вывода команды оболочки

Каков наилучший (переносимый и быстрый) способ чтения вывода команды оболочки в Vim? Этот вывод может быть двоичным и, следовательно, содержать нули и (не) иметь завершающую новую строку, что имеет значение. Текущие решения, которые я вижу:

  1. Используйте system () . Проблемы: не работает с NULL.
  2. Используйте : прочтите! . Проблемы: не сохраняет завершающий символ новой строки, пытается интеллектуально определять выходной формат (dos / unix / mac).
  3. Используйте ! с перенаправлением во временный файл, затем readfile (, "b") для его чтения. Проблемы: два вызова fs, опция shellredir также перенаправляет stderr по умолчанию, и он должен быть менее переносимым ( 'shellredir' здесь упоминается, потому что он, вероятно, будет установлен на допустимое значение ).
  4. Используйте систему () и отфильтруйте выходные данные через xxd . Проблемы: очень медленный, наименее переносимый (нет эквивалента 'shellredir' для каналов).

Есть ли другие идеи?

9
задан Gabe 5 February 2012 в 21:14
поделиться