Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 7, 2012 18:21:13

kt315e
От:
Зарегистрирован: 2009-12-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Прверка нажатия клавиши в консольной программе

Порылся по форумам, результат:

import os
while 1:
a = os.popen("./a.out")
if a.readlines()[0].strip(): break
Исходный код a.out:
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int mykbhit(void)
{
int fd;
char c;
fd = fileno(stdin);
fcntl(fd, F_SETFL, O_NONBLOCK);
if (read(fd, &c, sizeof(char)) < 0)
return 0;
return 1;
}

int main()
{
int res;
res = mykbhit();
if(res)
printf("1\n");
else
printf("\n");
return res;
}
Анализирую вывод сишной утилиты.
Всем спасибо!



Отредактировано (Янв. 7, 2012 18:22:54)

Офлайн

#2 Янв. 7, 2012 20:15:16

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Прверка нажатия клавиши в консольной программе

если нажмете кнопку во время работы питона, то утилита наверно не отловит нажатие.
а вообще, решение с потоками в “100” раз лучше.

Офлайн

#3 Янв. 8, 2012 08:30:42

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Прверка нажатия клавиши в консольной программе

o7412369815963
решение с потоками в “100” раз лучше
А не упоминавшееся тут решение с использованием tkinter наверное в 101 раз лучше. Короче будет и разрабатывалось для привненсения интерактивности.



Офлайн

#4 Янв. 8, 2012 09:50:13

kt315e
От:
Зарегистрирован: 2009-12-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Прверка нажатия клавиши в консольной программе

o7412369815963
если нажмете кнопку во время работы питона, то утилита наверно не отловит нажатие.
Отлавливает. Вроде всё то же самое можно сделать через модуль fcntl в питоне. Как в следующий раз понадобится, доделаю :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version