Vim: Предупреждение: выход не на терминал

0

Я запускаю двоичный файл C++, который запускает скрипт python. Я делаю это следующим образом

stream = popen(cmd.c_str(), "r");
if (stream) {
  while (!feof(stream))
    if (fgets(buffer, max_buffer, stream) != NULL) data.append(buffer);
  status = pclose(stream);
}

Этот скрипт python также запускает некоторые команды оболочки, используя подпроцесс

subprocess.check_call(arg_list)

Внезапно я начал получать ошибки, такие как "Vim: Warning: вывод не на терминал", а бинарный C++ зависает.

Какой самый простой способ исправить это?

Теги:
sh
vim

2 ответа

3

Вызов popen будет читать все, что подпроцесс записывает на свой стандартный вывод. Некоторые из них, вероятно, полезны (например, сообщения о статусе). Вы не получите полезных результатов от стандартного вывода vim, потому что это будет частично escape-последовательности (для перемещения курсора, изменения цветов).

Если вы можете изменить сценарий так, чтобы он специально обрабатывал vim, есть исправление: измените команды, которые запускают vim, чтобы они перенаправлялись в /dev/tty. Это изменит командную строку, которая выглядит так:

vim filename

в

vim filename >/dev/tty
0

Вы можете попробовать использовать

export TERM=vt100

перед вызовом Perl или первой командой в каждом подпроцессе Unix.

  • 0
    Я не уверен, как это отвечает на вопрос. Не могли бы вы объяснить это больше?
  • 0
    @FDinoff В AIX sed нет опции -i для изменения файла без файла tmp. Я использовал здесь-конструкцию с vi для редактирования файла, перенаправив stdout / stderr в / dev / null. Сценарии удаленной установки, которые работали в Solaris, завершились неудачно в AIX с сообщением об ошибке терминала. В моем случае я мог решить проблемы с установочным скриптом, добавив TERM=vt100

Ещё вопросы

Сообщество Overcoder
Наверх
Меню