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
из этого файла - также в блоках.