您使用什么Python事件系统?我已经知道了pydispatcher,但我想知道还能找到什么,或者是常用的?
我对作为大型框架一部分的事件管理器不感兴趣,我宁愿使用一个我可以轻松扩展的小型简单解决方案.
我想在python中从键盘读取数据
我试试这个:
nb = input('Choose a number')
print ('Number%s \n' % (nb))
Run Code Online (Sandbox Code Playgroud)
但它不起作用,既不是日食也不是终端,它总是停止问题.我可以输入一个数字,但没有任何事情发生.
你知道为什么吗?
我正在读取串行数据并使用while循环写入csv文件.我希望用户能够在他们认为已经收集到足够的数据后杀死while循环.
while True:
#do a bunch of serial stuff
#if the user presses the 'esc' or 'return' key:
break
Run Code Online (Sandbox Code Playgroud)
我使用opencv做了类似的事情,但它似乎没有在这个应用程序中工作(我真的不想为此函数导入opencv)...
# Listen for ESC or ENTER key
c = cv.WaitKey(7) % 0x100
if c == 27 or c == 10:
break
Run Code Online (Sandbox Code Playgroud)
所以.如何让用户摆脱循环?
另外,我不想使用键盘中断,因为脚本需要在while循环终止后继续运行.
我不是要求对这种哲学提出个人的"宗教"观点,而是要更具技术性.
我理解这句话是几个试金石中的一个,看你的代码是否是"pythonic".但对我来说,pythonic意味着干净,简单和直观,没有加载异常处理程序以进行错误的编码.
所以,实际的例子.我定义了一个类:
class foo(object):
bar = None
def __init__(self):
# a million lines of code
self.bar = "Spike is my favorite vampire."
# a million more lines of code
Run Code Online (Sandbox Code Playgroud)
现在,来自程序背景,在另一个函数中,我想这样做:
if foo.bar:
# do stuff
Run Code Online (Sandbox Code Playgroud)
如果我不耐烦并且没有做初始的foo = None,我会得到一个属性异常.所以,"请求宽恕不许可"表明我应该这样做吗?
try:
if foo.bar:
# do stuff
except:
# this runs because my other code was sloppy?
Run Code Online (Sandbox Code Playgroud)
为什么我在try块中添加额外的逻辑会更好,这样我可以让我的类定义更加模糊?为什么不先定义所有内容,然后明确授予权限?
(不要打扰我使用try/except块......我在任何地方都使用它们.我不认为用它们来捕捉我自己的错误是正确的,因为我不是一个彻底的程序员.)
或者......我是否完全误解了"请求原谅"的口头禅?
I have a simple python script, that has some functions that run in a loop (I'm taking sensor readings).
while True:
print "Doing a function"
Run Code Online (Sandbox Code Playgroud)
If the keyboard is pressed I'd like to print "key pressed".
What's the simplest way of doing this in Python? I've searched high and low. I've found out how to do it with pygame, but I'd rather do it without. If I do have to use pygame is it possible to not have a separate …
我是Python的新手,我只是用Python创建了一个游戏和一个菜单.问题是,使用(raw_)input()要求我在每次按键后按Enter键,我想按下向下箭头将立即选择下一个菜单项,或者在游戏中向下移动.目前,它需要我喜欢键入"向下"然后按Enter键.我也做了很多研究,但我不想下载大型模块(例如pygame)来实现单个keyDown()方法.那么有什么更简单的方法,我找不到?
编辑:
刚刚发现可以解决这个问题msvcrt.getch()
.它不是keyDown(),但它有效.但是,我不知道如何使用它,这看起来很奇怪,这里有什么帮助吗?这就是我现在所得到的:
from msvcrt import getch
while True:
key = getch()
print(key)
Run Code Online (Sandbox Code Playgroud)
但是,它一直给我所有这些无意义的字节,例如,向下箭头是这样的:
b'\xe0'
b'P'
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用它们,我试图与chr()进行比较,甚至使用ord(),但不能真正进行任何比较.我想要做的基本上是这样的:
from msvcrt import getch
while True:
key = getch()
if key == escape:
break
elif key == downarrow:
movedown()
elif key == 'a':
...
Run Code Online (Sandbox Code Playgroud)
等等......有什么帮助吗?
我正在使用raw_input
Python与shell中的用户进行交互.
c = raw_input('Press s or n to continue:')
if c.upper() == 'S':
print 'YES'
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但用户必须在按's'后按下回车键.有没有办法从用户输入完成我需要的东西,而无需在shell中按Enter键?我正在使用*nixes机器.
可能重复:
Python从用户读取单个字符
我希望能够使用python使用箭头键控制机器人.我的想法是实现看起来像这样的代码......
#!/usr/bin/env python
# control a robot using python
exit = 0
while exit == 0:
keypress = ##get keypress, if no key is pressed, continue##
if keypress == 'q':
exit = 1
break
elif keypress == KEY_UP:
##robot move forward##
elif keypress == KEY_DOWN:
##robot move backward##
print "DONE"
Run Code Online (Sandbox Code Playgroud)
但问题是我不知道如何获得用户输入.我不能使用基于GUI的解决方案,比如我发现的pygame,因为机器人不使用显示器.
很感谢任何形式的帮助!!
我需要在python终端程序中监听某些按键而不暂停执行raw_input
.我已经看到人们使用一些窗口特定的方式来听键击,我看到人们使用像tkinter和pygame这样的大模块,我想避免.
是否有一个轻量级模块,这个跨平台(至少ubuntu,Windows,Mac)?或者有没有办法只使用来自tkinter,pygame等的事件系统......?
如果没有,我应该如何解决这个问题呢?我的第一个想法是将stdin重定向到另一个进程并继续检查它是否包含我的一个事件键.
感谢@unutbu花时间标记这个3岁的问题,并成功回答了另一个问题的副本,其答案不适用于这个问题,因为我特别询问了一个非阻塞解决方案.
python ×10
keyboard ×3
break ×1
dispatcher ×1
events ×1
getch ×1
input ×1
key ×1
keydown ×1
keypress ×1
principles ×1
terminal ×1
user-input ×1
while-loop ×1
windows ×1