0

I'd like a code in which a raw_input function will end and move to a print function after 35 seconds.
So something like:

var = raw_input() # put time limit of 35 secs here
print "Time's up!" # prints this only if time runs out in the raw_input
6
Contributors
21
Replies
23
Views
6 Years
Discussion Span
Last Post by wikirifi
0

Sadly, an easy alternative to raw_input that does not block (that is portable) is not too easy to find.

I tried to create a version myself, but apparently raw_input even blocks other threads in the program from printing to the console. It's pretty strange.

However, if this is just for yourself or only for one platform, take a look at these postings I found around the web:

Windows
Linux

Good luck.

0

It doesn't have to be raw_input, as long as it's a prompting function that can be connected to a variable.

0

You can use ' threading ' module.

import threading
import time
def msg():
    print "time's up"
    time.sleep(2)#just enough to show the above msg    
    exit()
t=threading.Timer(5.0,msg)
t.start()

But you have to figure out how to use it with Raw_input. Don't hesitate to ask.Go on.

Edited by Dani: Fixed formatting

0

if you did't understand the code .once again

import threading
import time
def msg():
    print "time's up"
    time.sleep(2)#just enough to show the above msg    
    exit()
t=threading.Timer(5.0,msg)
t.start()

Since I'm not a guru myself(As u can see I'm a Newbie poster)so I'm looking for it myself.
I'll inform u if I got anything useful.

0

A simple example using Tkinter's after feature. You would probably want after to call a clean-up function to check for partial entries, etc., and then call quit().

import Tkinter

class TestClass():

   def __init__(self):
      
      self.top = Tkinter.Tk()
      self.top.title("Test of Timing")
      self.top.geometry("200x150+10+10")

      label_1 = Tkinter.Label(self.top, text="Timer Test ").pack(side="left" )
      entry_1 = Tkinter.Entry(self.top, width=10).pack(side="left")

      self.top.after(5000, self.top.quit)     ## 5 seconds
      self.top.mainloop()
         
if __name__ == '__main__':
   CT=TestClass()

Edited by woooee: n/a

0

For windows you can use the msvcrt module:

import msvcrt
import sys

time_is_up = False  #use threads to modify this
userinput = ""

while True:
    if msvcrt.kbhit():
        ch = msvcrt.getch()
        if ch != "\r" and not time_is_up:
            userinput += ch
            sys.stdout.write(ch)
        else:
            break

Edited by jcao219: n/a

0

EDIT: As woooee posted, Tkinter's after function would probably be optimal if you plan on creating a GUI for your script. If not, then the following is probably what you are looking for:

Well apparently I was slightly wrong in my last post. Although raw_input() does block, it is indeed possible to get around with threads. In the piece of code I created myself, (similar to diwakar's) I tested it within an IDE and it did not work. However, when I ran it under normal conditions, it did.

Here's the code if you would like:

#!/usr/bin/python

import threading
from time import sleep

got_input = False

def printStuff():
    print
    print "Sorry, you didn't enter anything."
    print "Have a nice day."

class TimeThread(threading.Thread):
    def __init__(self, max_):
        threading.Thread.__init__(self)
        self.max_ = max_
        
    def run(self):
        sleep(self.max_)
        if (got_input == False): # the time is up: if the user didn't enter anything, print stuff.
            printStuff()
        
time_thread = TimeThread(3)
time_thread.start()
print "Enter your name: "
name = raw_input("> ")
got_input = True # if this code is executed, it means the user did input something
print "Welcome,", name

Edited by SoulMazer: n/a

0

Thank you! Before I close the thread, how does SoulMazer's script work? I'd like to know for future references.

0

It doesn't have to be raw_input, as long as it's a prompting function that can be connected to a variable.

I don't want images. And I want to be able to prompt.

Make up your mind. Those of us who volunteer have a limited amount of time to spend here and do not wish to waste it generating code that will not be used.

0

Make up your mind. Those of us who volunteer have a limited amount of time to spend here and do not wish to waste it generating code that will not be used.

Uh.. it's solved.

0

Another problem; SoulMazer's code doesn't work. Yes, it gives you a time, but it doesn't end the action. Sorry if I'm taking up time, but I'm desperate to finish this game of mine. :(

0

Another problem; SoulMazer's code doesn't work. Yes, it gives you a time, but it doesn't end the action. Sorry if I'm taking up time, but I'm desperate to finish this game of mine. :(

Are you on windows or linux?
Or do you want to target both?

0

Another problem; SoulMazer's code doesn't work. Yes, it gives you a time, but it doesn't end the action. Sorry if I'm taking up time, but I'm desperate to finish this game of mine. :(

What do you mean? The code prompts you for a string, and if you do not enter one within X seconds, it prints some messages. Yes, I do have to admit that it does not cancel the original raw_input call, so the user can still input text, but that's why I originally said it was not truly possible.

If you look back to the links I provided in my first post, it provides alternatives to raw_input for both Windows in Linux without a GUI.

If you want more specific help, please be more specific with your problem, as woooee stated.

0

What do you mean? The code prompts you for a string, and if you do not enter one within X seconds, it prints some messages. Yes, I do have to admit that it does not cancel the original raw_input call, so the user can still input text, but that's why I originally said it was not truly possible.

If you look back to the links I provided in my first post, it provides alternatives to raw_input for both Windows in Linux without a GUI.

If you want more specific help, please be more specific with your problem, as woooee stated.

Sorry.

So here it is.

I'm making a game right now, and I am making a challenge mode. So I'd like the raw_input to stop functioning after a certain period of time.

My guess is to make the raw_input a function and break it after time passes. That's my guess, not sure if it will work.

0

Sorry.

So here it is.

I'm making a game right now, and I am making a challenge mode. So I'd like the raw_input to stop functioning after a certain period of time.

My guess is to make the raw_input a function and break it after time passes. That's my guess, not sure if it will work.

No, that won't work unless if you write your own raw_input function (e.g. on Windows this would be using msvcrt.getch, etc).
Do you want a cross-platform solution? Or do you want only Windows/Linux?

0

No, that won't work unless if you write your own raw_input function (e.g. on Windows this would be using msvcrt.getch, etc).
Do you want a cross-platform solution? Or do you want only Windows/Linux?

Cross-Platform, if possible. I may have to work with this on a Mac.

0

I am also a newby to Python, my issue with raw_input is not that simple.

I'm currently using PyUIQ so msvcrt is out the window. I'm looking for an alternative to raw_input since the builtin one hangs the console or raises an error, please help.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.