Создание прокси буферизованного stdout / stdin в python

1

В настоящее время 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 без блокировки?

Теги:
subprocess

1 ответ

0

Этот пример работает для меня:

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

Ещё вопросы

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