用户起床吃午饭,30分钟后回来。一旦他们进入一个命令,30分钟内就会发生一连串的事情。另外,我希望用户知道,如果他们离开游戏无人看管,他们可能会死亡。我很想查看此代码,但当我在我的机器上运行时,它无法识别msvcrt。我正在mac上运行python 3.3

用户起床吃午饭,30分钟后回来。一旦他们进入一个命令,30分钟内就会发生一连串的事情。另外,我希望用户知道,如果他们离开游戏无人看管,他们可能会死亡。我很想查看此代码,但当我在我的机器上运行时,它无法识别msvcrt。我正在mac上运行python 3.3,python,Python,用户起床吃午饭,30分钟后回来。一旦他们进入一个命令,30分钟内就会发生一连串的事情。另外,我希望用户知道,如果他们离开游戏无人看管,他们可能会死亡。我很想查看此代码,但当我在我的机器上运行时,它无法识别msvcrt。我正在mac上运行python 3.3。我需要做什么才能使它工作?原来msvcrt只是windows。。。我早该知道的。我更新了代码,使之适用于linux。希望它也能和mac一起工作。我没有访问osx机器的权限,所以我无法自己测试它。这也是用Python2.7测试的,所以如果您有问


用户起床吃午饭,30分钟后回来。一旦他们进入一个命令,30分钟内就会发生一连串的事情。另外,我希望用户知道,如果他们离开游戏无人看管,他们可能会死亡。我很想查看此代码,但当我在我的机器上运行时,它无法识别msvcrt。我正在mac上运行python 3.3。我需要做什么才能使它工作?原来msvcrt只是windows。。。我早该知道的。我更新了代码,使之适用于linux。希望它也能和mac一起工作。我没有访问osx机器的权限,所以我无法自己测试它。这也是用Python2.7测试的,所以如果您有问题,可以尝试通过2到3的代码转换器进行测试。
import time
import sys

win32 = True
try:
    from msvcrt import kbhit, getch
    print "[+] Running on windows, using msvcrt."
except ImportError:
    print "[+] Not running on windows, attempting unix-like."
    win32 = False

    import termios, fcntl, sys, os
    import select
    fd = sys.stdin.fileno()

    oldterm = termios.tcgetattr(fd)
    newattr = termios.tcgetattr(fd)
    newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
    termios.tcsetattr(fd, termios.TCSANOW, newattr)

    oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
    fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)


POLLTIME = 5
done = False
command = ""
while not done:

    sys.stdout.write("\r")
    print("Something happened (polling)%s" % (" " * command.__len__() ))
    sys.stdout.write("Enter command: %s" % command)
    sys.stdout.flush()

    t = time.time()
    if win32:
        while time.time() - t < POLLTIME:
            if kbhit():
                c = getch()
                if ord(c) < 127 and ord(c) > 31:
                    command += c
                    message = "\rEnter command: " + command
                    sys.stdout.write("\r%s" % message)
                if "\r" == c:
                    if "quit\r" == command:
                        done = True
                        break
                    sys.stdout.write("\rThe command was: %s\n" % command)
                    command = ""
                    sys.stdout.write("\rEnter command: %s \b" %command)
                elif "\b" == c:
                    command = command[:-1]
                    sys.stdout.write("\rEnter command: %s \b" %command)
                sys.stdout.flush()
    else:
        while time.time() - t < POLLTIME:
            try:
                c = '\0'                
                if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
                    c = sys.stdin.readline(1)
                    if ord(c) < 127 and ord(c) > 31:
                        command += c
                        message = "\rEnter command: " + command
                        sys.stdout.write("\r%s" % message)
                if c == "\n":
                    if "quit" == command:
                        done = True
                        break
                    print("\rThe command was: %s" % command)
                    command = ""
                    message = "\rEnter command: " + command
                    sys.stdout.write("\r%s" % message)
                if 127 == ord(c):
                    command = command[:-1]
                    sys.stdout.write("\rEnter command: %s \b" % command)
                sys.stdout.flush()

            except IOError:
                    pass