用subprocess.Pope()方法中stderr, stdout,參數指定為subprocess.PIPE時,程序會卡死。(具體原因還不知道)
代碼大致流程:
pipe = subprocess.Popen(args, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
pipe.wait()
已知args調用的外部程序有終止的。這裡我調用g++來編譯一段C/C++代碼。
程序到pipe.wait()卡住了。
是何原因?
使用 subprocess 模塊的 Popen 調用外部程序,如果 stdout 或 stderr 參數是 pipe,並且程序輸出超過操作系統的 pipe size時,如果使用 Popen.wait() 方式等待程序結束獲取返回值,會導致死鎖,程序卡在 wait() 調用上。
ulimit -a 看到的 pipe size 是 4KB,那只是每頁的大小,查詢得知 linux 默認的 pipe size 是 64KB。
http://blog.csdn.net/carolzhang8406/article/details/22286913