用户起床吃午饭,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