如何从控制台python应用程序轮询键盘?具体来说,我想在许多其他I/O活动(套接字选择,串行端口访问等)中做类似的事情:
while 1:
# doing amazing pythonic embedded stuff
# ...
# periodically do a non-blocking check to see if
# we are being told to do something else
x = keyboard.read(1000, timeout = 0)
if len(x):
# ok, some key got pressed
# do something
Run Code Online (Sandbox Code Playgroud)
在Windows上执行此操作的正确pythonic方法是什么?此外,Linux的可移植性也不错,但并不是必需的.
我想使用多处理(以避免多核机器上的 GIL 问题)并使用相同的串行端口进行读取进程和写入进程。那可能吗?如果是这样,如何获取端口,然后如何获取子进程可以使用的文件对象?
编辑——这需要在 Windows 上运行,但 Mac 和 Linux 也很好。
在NVIDIA卡上,我可以使用累积缓冲区执行完整场景抗锯齿,如下所示:
if(m_antialias)
{
glClear(GL_ACCUM_BUFFER_BIT);
for(int j = 0; j < antialiasing; j++)
{
accPerspective(m_camera.FieldOfView(), // Vertical field of view in degrees.
aspectratio, // The aspect ratio.
20., // Near clipping
1000.,
JITTER[antialiasing][j].X(), JITTER[antialiasing][j].Y(),
0.0, 0.0, 1.0);
m_camera.gluLookAt();
ActualDraw();
glAccum(GL_ACCUM, float(1.0 / antialiasing));
glDrawBuffer(GL_FRONT);
glAccum(GL_RETURN, float(antialiasing) / (j + 1));
glDrawBuffer(GL_BACK);
}
glAccum(GL_RETURN, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
在ATI卡上,没有实现累积缓冲区,并且每个人都说你现在可以用着色器语言来实现.当然,问题在于GLSL是OpenGL初学者进入的一个相当高的障碍.
任何人都可以向我指出一些能告诉我如何以ATI卡可以做到的方式进行全景抗锯齿,以及新手可以理解的东西吗?
我正在使用 Cython 从 USB 摄像头抓取图像并将其转换为返回给调用者的 PIL 图像。
图像的数据位于图像抓取函数返回的结构体的“convert_buffer”成员所指向的字符数组中:
struct FlyCaptureImage:
/// stuff
char * convert_buffer
/// more stuff
Run Code Online (Sandbox Code Playgroud)
现在,我正在这样做将其转换为 PIL 图像:
cdef unsigned char *convert_buffer
cdef Py_ssize_t byte_length
cdef bytes py_string
// get the number of bytes into a Py_ssize_t type
byte_length = count
// slice the char array so it looks like a Python str type
py_string = convert_buffer[:byte_length]
// create the PIL image from the python string
pil_image = PILImage.fromstring('RGB', (width, height), py_string)
Run Code Online (Sandbox Code Playgroud)
将数据转换为 Python 字符串的过程需要 2 毫秒,这听起来可能是一个零复制事件。是否可以让 …
以下代码不返回None,而是一些神秘的" main _.link_list对象":
class link_list(object):
"""a link list class"""
def __init__(self, list):
super(link_list, self).__init__()
pdb.set_trace()
if list==[]:
return None
else:
self.value = list[0]
self.next = link_list(list[1:len(list)])
Run Code Online (Sandbox Code Playgroud)
测试代码打印'False':
l=link_list([1,2,3])
print l.next.next.next==None
Run Code Online (Sandbox Code Playgroud)
为什么?
python ×4
antialiasing ×1
blocking ×1
camera ×1
console ×1
cython ×1
keyboard ×1
nonblocking ×1
opengl ×1
serial-port ×1
usb ×1