我正在运行一个运行python脚本的C ++二进制文件。我这样做是按照以下方式进行的
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脚本还使用子进程
运行一些shell命令subprocess.check_call(arg_list)
突然间,我开始收到错误,例如" Vim:警告:输出不到终端"并且C ++二进制文件挂起。
修复它的最简单方法是什么?
答案 0 :(得分:3)
popen
调用将读取子进程写入其标准输出的任何内容。其中一些可能很有用(例如状态消息)。你不会从vim的标准输出中获得有用的结果,因为它将是部分转义序列(用于移动光标,改变颜色)。
如果您可以修改脚本以便它专门处理vim,则有一个修复:修改运行vim的命令,以便它们重定向到/dev/tty
。这将改变看起来像这样的命令字符串
vim filename
到
vim filename >/dev/tty
答案 1 :(得分:0)
您可以尝试使用
export TERM=vt100
在调用Perl之前或作为每个Unix子进程中的第一个命令。