RHEL 6.5 で Python 2.6.6 で subprocess32 3.2.6 を使用しています。次のようなシーケンス:
command = "sleep 20"
proc = subprocess.Popen(command, shell=True, bufsize=-1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
std_out, std_err = proc.communicate(None, timeout=1)
期待どおりに動作します。つまり、1 秒のタイムアウトが機能します。ただし、
command = "sleep 20; echo Hello World"
サブプロセスは 20 秒間実行されているようです。これを回避することはできますが、何が間違っているのか、またはなぜこのように機能するのかを理解しておくとよいでしょう。ところで、これは非常に管理された信頼できる環境にあるため、「shell=True」は危険ではありません。