Exec-команда Python с управлением каналом

У меня есть скрипт Python, который вызывается по сети. Этот скрипт получает некоторые данные в качестве входного потока и отправляет некоторые данные в качестве выходных данных - stdin и stdout.

Теперь я хочу, чтобы этот скрипт вызывал другой. И перенаправляет его стандартный ввод на дочерний процесс и дочерний вывод обратно. В основном это будет прокси-подобный скрипт.

Самый важный момент - размер данных для передачи. Это огромно - поэтому я не могу использовать буферы. Например: допустим, дочерний процесс отправит 1 ГБ данных. Родительский скрипт должен быть в состоянии подготовить дочерний стандартный вывод и направить эти данные в свой собственный стандартный вывод.

Та же проблема с stdin - parent получает много данных и не может их буферизовать перед отправкой child.

Вопрос в том, как реализовать это в Python?

благодарю вас

1 ответ

Если данные должны быть полностью прочитаны перед отправкой обратно, вы можете реализовать прокси, используя:

import sys
from subprocess import *
if __name__ == "__main__":

    network_content = sys.stdin.read()
    p = Popen("python other_script.py",stdin=PIPE, stdout=PIPE, stderr=PIPE, 
          close_fds=True)
    child_stdin,child_stdout = p.communicate()
    child_stdin.write(network_content)    
    child_content = child_stdout.read()
    sys.stdout.write(child_content)    

Если проблема заключается в сохранении всех данных в памяти, считайте их в блоках, сбросьте их в файл TMP и запишите в child_stdout из этого файла - также в блоках.

Другие вопросы по тегам