В документе wait (http://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait) говорится:
Предупреждение
Это будет заторможен при использовании stdout = PIPE и/или stderr = PIPE и дочерний процесс генерирует достаточный выход в канал таким образом, что он блокирует ожидая, когда буфер буфера OS примет больше данных. Использовать связь() чтобы избежать этого.
Из этого, я думаю, communicate может заменить все использование wait(), если retcode не требуется. И даже если stdout или stdin не являются PIPE, я также могу заменить wait() на communicate().
Это правильно? Спасибо!