Форум сайта python.su
PooHнужна,
Бросьте этих глупостей. Интерактивщина в терминале не нужна.
Офлайн
Лучше тогда уже читайте о сигналах. Это более правильный подход к реализации данной задачи.
Офлайн
>но оно останавливает выполнение программы и ждет нажатия клавиши.
Ну и что? Запустите проверку нажатия клавиши в отдельном потоке, при нажатии клавиши изменяйте значение глобальной переменной которая будит проверяться в теле цикла и при необходимости завершать его.
Офлайн
Rodegast+1
Запустите проверку нажатия клавиши в отдельном потоке, при нажатии клавиши изменяйте значение глобальной переменной которая будит проверяться в теле цикла и при необходимости завершать его.
Офлайн
Удалось решить проблему? Сейчас стоит именно такая же задача как и у автора. Кто знает как сделать?
Офлайн
Serji_01
Удалось решить проблему? Сейчас стоит именно такая же задача как и у автора. Кто знает как сделать?
Serji_01Есть мнение, что стоит опробывать сей вариант…Rodegast
Rodegast написал:
Запустите проверку нажатия клавиши в отдельном потоке, при нажатии клавиши изменяйте значение глобальной переменной которая будит проверяться в теле цикла и при необходимости завершать его.
Офлайн
UsCrПопробовал, может неочень правильный? У меня по-прежнему происходит ожидание нажатия клавиши, и только потом цикл продолжается.
Есть мнение, что стоит опробывать сей вариант…
Офлайн
вариант с потоком:
# coding: utf8
import thread, time
def myfunction(stop):
while 1:
print '.',
if stop[0]: break
time.sleep(0.3)
stop = [0]
thread.start_new_thread(myfunction,(stop,))
raw_input('')
stop[0]=1
Офлайн
Мне кажется это оптимальное решение:
try: while True: do_something() except KeyboardInterrupt: pass
Отредактировано Gosha777 (Авг. 20, 2017 21:45:05)
Офлайн
Рабочий код:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys, select, termios def kbhit(): r = select.select([sys.stdin], [], [], 0) return bool(r[0]) if __name__ == '__main__': fd = sys.stdin.fileno() old_term = termios.tcgetattr(fd) new_term = termios.tcgetattr(fd) new_term[3] = (new_term[3] & ~termios.ICANON & ~termios.ECHO) try: termios.tcsetattr(fd, termios.TCSAFLUSH, new_term) while 1: if kbhit(): ch = sys.stdin.read(1) if ch=='0': break sys.stdout.write('.') print ('done') finally: termios.tcsetattr(fd, termios.TCSAFLUSH, old_term)
Офлайн