The select() implementation on windows uses sockets library so it can be called only with sockets descriptors. Using os.fstat() to peek if there is a data available in the pipe works on both linux and windows (tested on WinXP+python.org and Debian testing).