네트워크로 호출되는 파이썬 스크립트가 있습니다. 이 스크립트는 일부 데이터를 입력 스트림으로 가져오고 일부 데이터를 출력 하나 - stdin 및 stdout으로 보냅니다.파이프 제어 기능이있는 Python exec 명령
이제이 스크립트가 다른 스크립트를 호출하기를 원합니다. 그리고 그의 표준을 아동 과정과 아동의 표준 출력으로 되돌려줍니다. 기본적으로 이것은 스크립트와 같은 프록시가 될 것입니다.
가장 중요한 순간은 전송할 데이터 크기입니다. 그것은 거대합니다 - 그래서 나는 버퍼를 사용할 수 없습니다. 예를 들어, 하위 프로세스에서 1GB의 데이터를 전송한다고 가정 해 보겠습니다. 부모 스크립트는 준비된 자식의 stdout을 가져올 수 있어야하며이 데이터를 자신의 stdout으로 전달할 수 있어야합니다.
같은 문제는 stdin-parent가 많은 양의 데이터를 받고 자식에게 보내기 전에 버퍼링 할 수 없다는 것입니다.
질문은 이것을 Python으로 구현하는 방법입니까?
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)
메모리에 모든 데이터를 유지하면되는 문제는 다음에 읽을 : 데이터를 다음 사용하여 프록시를 구현할 수 완전히 다시 보내기 전에 읽어야 할 필요가있는 경우
는
다른 스크립트 파이썬 코드 또는 다른 것이 있습니까? 그렇다면 동일한 프로세스에서 실행할 수 있습니까? –
아니요, 이것은 컴파일 된 C 프로그램 – user349302