В настоящее время vim имеет ошибку, при которой отправка большой строки может привести к блокировке. https://github.com/vim/vim/issues/2548 Дискуссия по-прежнему идет о том, как ее исправить.
В качестве обходного пути я подумал о том, как использовать python в качестве прокси-исполняемого файла, который будет автоматически запускать stdout/stdin/stderr, чтобы он не зависал.
Если бы я хотел запустить executable
в vim, я бы сначала начал скрипт python, который выглядел бы как python proxy.py -- executable -arg0 -arg1
. Тогда Python запустил бы исполняемый файл с соответствующими аргументами и запустил бы stdout и stdin, поэтому vim будет получать только 1024 байта за раз, а python будет читать только 1024 байта за раз.
Какой был бы лучший способ выполнить это в python без блокировки?
Этот пример работает для меня:
import subprocess
import sys
BUFSIZE = 1024
p = subprocess.Popen(sys.argv[1:], stdin=subprocess.PIPE, bufsize=BUFSIZE)
while True:
chunk = sys.stdin.read(BUFSIZE)
if not chunk:
break
p.stdin.write(chunk)
p.stdin.flush()
p.stdin.close()
p.wait()
Я тестировал его с помощью
ls -lR | python proxy.py cat -n
а также
echo 123 | python proxy.py cat -n