IOError: [Errno 1] Operation not permitted: '/dev/uinput'

IOError: [Errno 1] Operation not permitted: '/dev/uinput'

让python读取按键事件好像有点问题,我写了这段代码 用于在我按下 space 时录制并在我释放时停止..

import pyaudio
import wave
import keyboard

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

print("* recording")

frames = []

while keyboard.is_pressed('space'):
    data = stream.read(CHUNK)
    frames.append(data)

print("* done recording")

stream.stop_stream()
stream.close()
p.terminate()

wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

但是当运行这个代码时,我得到这个错误信息。

python sound_record.py 
* recording
Traceback (most recent call last):
  File "sound_record.py", line 24, in <module>
    while keyboard.is_pressed('space'):
  File "/usr/local/lib/python2.7/site-packages/keyboard/__init__.py", line 162, in is_pressed
    _listener.start_if_necessary()
  File "/usr/local/lib/python2.7/site-packages/keyboard/_generic.py", line 36, in start_if_necessary
    self.init()
  File "/usr/local/lib/python2.7/site-packages/keyboard/__init__.py", line 112, in init
    _os_keyboard.init()
  File "/usr/local/lib/python2.7/site-packages/keyboard/_nixkeyboard.py", line 110, in init
    build_device()
  File "/usr/local/lib/python2.7/site-packages/keyboard/_nixkeyboard.py", line 106, in build_device
    ensure_root()
  File "/usr/local/lib/python2.7/site-packages/keyboard/_nixcommon.py", line 163, in ensure_root
    raise ImportError('You must be root to use this library on linux.')
ImportError: You must be root to use this library on linux.

当我使用 sudo 执行此操作时:

sudo !!
sudo python sound_record.py 
Password:
* recording
Traceback (most recent call last):
  File "sound_record.py", line 24, in <module>
    while keyboard.is_pressed('space'):
  File "/usr/local/lib/python2.7/site-packages/keyboard/__init__.py", line 162, in is_pressed
    _listener.start_if_necessary()
  File "/usr/local/lib/python2.7/site-packages/keyboard/_generic.py", line 36, in start_if_necessary
    self.init()
  File "/usr/local/lib/python2.7/site-packages/keyboard/__init__.py", line 112, in init
    _os_keyboard.init()
  File "/usr/local/lib/python2.7/site-packages/keyboard/_nixkeyboard.py", line 110, in init
    build_device()
  File "/usr/local/lib/python2.7/site-packages/keyboard/_nixkeyboard.py", line 107, in build_device
    device = aggregate_devices('kbd')
  File "/usr/local/lib/python2.7/site-packages/keyboard/_nixcommon.py", line 141, in aggregate_devices
    uinput = make_uinput()
  File "/usr/local/lib/python2.7/site-packages/keyboard/_nixcommon.py", line 27, in make_uinput
    uinput = open("/dev/uinput", 'wb')
IOError: [Errno 1] Operation not permitted: '/dev/uinput'

为什么我会收到此错误消息?

您似乎正在使用 Python 包 keyboard,其 description 是:

Hook and simulate keyboard events on Windows and Linux

如果你想在 MacOS 上处理键盘事件,你需要找到一个包来做这件事。