2011-07-06 120 views
2

我有一個被網絡調用的python腳本。這個腳本獲取一些數據作爲輸入流併發送一些數據作爲輸出 - stdin和stdout。Python執行命令與管道控制

現在我想讓這個腳本調用另一個。並將他的stdin重定向到子進程和孩子的stdout。基本上這將是代理像腳本。

最重要的時刻是要傳輸的數據大小。這是巨大的 - 所以我不能使用緩衝區。例如:假設子進程將發送1GB的數據。父腳本應該能夠準備好孩子的stdout並將這些數據轉發到他自己的stdout。

同樣的問題是與標準輸入 - 父母接收大量的數據,並不能緩存它發送給子。

問題是如何在Python中實現這個?

謝謝

+0

這是其他腳本的Python代碼,還是別的?如果是這樣,它可以在同一個過程中運行嗎? –

+0

不是,這是編譯的c程序 – user349302

回答

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 - 也以塊形式寫入。

+0

不幸的是,只有當發送/接收只有一個週期時才能工作 - 但我希望能夠組織對話框 - 因此代理不知道讀取中的std是否完成... 。 – user349302