У меня есть другая перспектива ответить на это.
При работе на разных уровнях, например, в приложении MVC, контроллеру нужны службы для вызова бизнес-операций. В таких сценариях контейнер инжекции зависимостей может использоваться для инициализации служб, чтобы исключить исключение NullReferenceException. Это означает, что вам не нужно беспокоиться о проверке нулевого значения и просто вызвать службы с контроллера, как будто они всегда будут доступны (и инициализированы) как одиночный или прототип.
public class MyController
{
private ServiceA serviceA;
private ServiceB serviceB;
public MyController(ServiceA serviceA, ServiceB serviceB)
{
this.serviceA = serviceA;
this.serviceB = serviceB;
}
public void MyMethod()
{
// We don't need to check null because the dependency injection container
// injects it, provided you took care of bootstrapping it.
var someObject = serviceA.DoThis();
}
}
В Windows вам нужен модуль msvcrt
, в частности, похоже, что вы описываете свою проблему, функция msvcrt.getch :
Читать нажмите клавишу и верните полученный символ. На консоль ничего не отозвалось. Этот вызов будет блокироваться, если нажатие клавиши еще не доступно, но не будет ждать нажатия Enter.
blockquote>(и т. Д. - см. Документы, на которые я только что указал). Для Unix см., Например, этот рецепт для простого способа построения аналогичной функции
getch
(см. также несколько альтернатив & amp; c в потоке комментариев этого рецепта).
Чтобы получить один символ, я использовал getch , но я не знаю, работает ли он в Windows.
Вместо модуля msvcrt
вы также можете использовать WConio :
>>> import WConio
>>> ans = WConio.getkey()
>>> ans
'y'
На боковой ноте msvcrt.kbhit () возвращает логическое значение, определяющее, нажата ли в данный момент клавиша на клавиатуре.
Итак, если вы делаете игру или что-то еще и хотите, чтобы нажатия клавиш делали что-то, но не останавливали игру целиком, вы можете использовать kbhit () внутри оператора if, чтобы убедиться, что ключ только извлекается, если пользователь действительно хочет что-то сделать.
Пример в Python 3:
# this would be in some kind of check_input function
if msvcrt.kbhit():
key = msvcrt.getch().decode("utf-8").lower() # getch() returns bytes data that we need to decode in order to read properly. i also forced lowercase which is optional but recommended
if key == "w": # here 'w' is used as an example
# do stuff
elif key == "a":
# do other stuff
elif key == "j":
# you get the point
Python не предоставляет многоплатформенное решение из коробки. Если вы находитесь в Windows, вы можете попробовать msvcrt с помощью:
import msvcrt
print 'Press s or n to continue:\n'
input_char = msvcrt.getch()
if input_char.upper() == 'S':
print 'YES'
curses могут сделать это также:
blockquote>import curses, time #-------------------------------------- def input_char(message): try: win = curses.initscr() win.addstr(0, 0, message) while True: ch = win.getch() if ch in range(32, 127): break time.sleep(0.05) except: raise finally: curses.endwin() return chr(ch) #-------------------------------------- c = input_char('Press s or n to continue:') if c.upper() == 'S': print 'YES'