I badly need to make this timed STDIN work because the script will be used manually as well as run as a cron/scheduled task.
Here's one thought that may or may not work. How about using command line parameters and one of the Getopt modules to specify whether the script should run in batch mode (i.e. no user input) versus interactive mode (i.e. requires user to interact with the script). Going this route would mean that you can not bother with user input for the batch mode and to wait indefinitely for user input in interactive mode. Without knowing anything further about what your full code is doing, I think that this could potentially eliminate your timeout needs.