带管道控件的Python exec命令

时间:2011-07-06 03:59:24

标签: python exec

我有一个由网络调用的python脚本。该脚本将一些数据作为输入流获取,并将一些数据作为输出发送 - stdin和stdout。

现在我希望这个脚本可以调用其他脚本。并将他的stdin重定向到子进程和孩子的stdout回来。基本上这将像脚本一样代理。

最重要的时刻是要传输的数据大小。这是巨大的 - 所以我不能使用缓冲区。例如:假设子进程将发送1GB数据。父脚本应该能够准备好孩子的标准输出并将这些数据转发给他自己的标准输出。

同样的问题是stdin - parent收到大量数据,在发送给孩子之前无法缓冲它。

问题是如何在python中实现它?

谢谢

1 个答案:

答案 0 :(得分:0)

如果在发回数据之前需要完全读取数据,那么您可以使用以下方法实现代理:

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 - 也在块中。