Exec-команда Python с управлением каналом - PullRequest
2 голосов
/ 06 июля 2011

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

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

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

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

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

спасибо

1 Ответ

0 голосов
/ 06 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...