Я запускаю двоичный файл 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++ зависает.
Какой самый простой способ исправить это?
Вызов popen
будет читать все, что подпроцесс записывает на свой стандартный вывод. Некоторые из них, вероятно, полезны (например, сообщения о статусе). Вы не получите полезных результатов от стандартного вывода vim, потому что это будет частично escape-последовательности (для перемещения курсора, изменения цветов).
Если вы можете изменить сценарий так, чтобы он специально обрабатывал vim, есть исправление: измените команды, которые запускают vim, чтобы они перенаправлялись в /dev/tty
. Это изменит командную строку, которая выглядит так:
vim filename
в
vim filename >/dev/tty
Вы можете попробовать использовать
export TERM=vt100
перед вызовом Perl или первой командой в каждом подпроцессе Unix.
TERM=vt100