2013-01-05 57 views
1

python 3时间输入有可能超时吗?我设法在Java中做我想做的事情,但是如何在Python中做到这一点?你可以使用jython并设法编译它,以便它不需要运行jython安装(我只在目标计算机上有python)?Python时间输入

import java.io.IOException; 

public class TimedRead { 
    public static String timedRead(int timeout) { 
     long startTime = System.currentTimeMillis(); 
     long endTime = 0; 
     char last = '0'; 
     String data = ""; 
     while(last != '\n' && (endTime = System.currentTimeMillis()) - startTime < timeout) { 
      try { 
       if(System.in.available() > 0) { 
        last = (char) System.in.read(); 
        data += last; 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return "IO ERROR"; 
      } 
     } 
     if(endTime - startTime >= timeout) { 
      return null; 
     } else { 
      return data; 
     } 
    } 
    public static void main(String[] args) { 
     String data = timedRead(3000); 
     System.out.println(data); 
    } 
} 

谢谢。

编辑:

我可以抛出一个错误导致线程暂停。

import signal 

#This is an "Error" thrown when it times out 
class Timeout(IOError): 
    pass 

def readLine(timeout): 
    def handler(signum, frame): 
     #Cause an error 
     raise Timeout() 

    try: 
     #Set the alarm 
     signal.signal(signal.SIGALRM, handler) 
     signal.alarm(timeout) 

     #Wait for input 
     line = input() 

     #If typed before timed out, disable alarm 
     signal.alarm(0) 
    except Timeout: 
     line = None 

    return line 

#Use readLine like you would input, but make sure to include one parameter - the time to wait in seconds. 
print(readLine(3)) 

回答

-1

我会发布这作为注释,如果我能...看看到datetime模块,http://docs.python.org/3/library/datetime.html - 您可以使用datetime.now()和timedelta来完成同样的事情,你有以上。

+0

问题是没有“available()”函数,所以它在您调用read()时似乎锁定stdin。 – singerng