위대한 "evdev"라이브러리를 사용하여 USB 바코드 판독기 입력을 듣고 있는데, 장치를 갑자기 뽑으면 응답이 끊어 지는지 감지해야합니다. 그렇지 않으면 루프를 읽는 python 스크립트가 100으로 바뀌기 때문입니다 단일 스레드에서 % cpu 사용량을 천천히 잡아 당겨서 전체 시스템이 조금 후에 충돌하는 모든 사용 가능한 메모리를 먹기 시작합니다.Python evdev 장치 연결 해제
아이디어는 장치가 분리되었을 때이를 감지하고 현재 스크립트를 강제 종료하여 감독자가 장치를 다시 꽂거나 응답 할 때까지 다시 시작하려고 시도하는 것입니다.
다음과 같이 내가 입력을 읽기 위해 사용하고 코드는 다음과 같습니다
devices = map(InputDevice, list_devices())
keys = {
2: 1,
3: 2,
4: 3,
5: 4,
6: 5,
7: 6,
8: 7,
9: 8,
10: 9,
11: 0,
}
dev = None
for d in devices:
if d.name == 'Symbol Technologies, Inc, 2008 Symbol Bar Code Scanner':
print('%-20s %-32s %s' % (d.fn, d.name, d.phys))
dev = InputDevice(d.fn)
break
if dev is not None:
code = []
for event in dev.read_loop():
if event.type == ecodes.EV_KEY:
if event.value == 00:
if event.code != 96:
try:
code.append(keys[event.code])
except:
code.append('-')
else:
card = "".join(map(str, code))
print card
code = []
card = ""
그래서 어떻게이 적절한 방법을하고 가겠어요?
그 방법은 가능 할지도 모르지만 그 장치가 여전히 사용 가능한지 확인하는 매 1-5 분마다 cron에서 실행되는 두 번째 스크립트가 될 것입니다. 지금은 일부 파일의 프로세스 ID를 가져 와서 프로세스를 종료하지만 이 방법의 문제점은 장치가 연결 해제 된 후 검사 사이에 다시 연결되면 "검사기"스크립트는 주 스크립트가 천천히 충돌하는 동안 모든 것이 정상이라고 생각합니다. "연결 해제"후에 다시 활성화되지 않습니다.
안녕하세요 게오르기, 당신이 내 evdev 질문에 대해 자세히 살펴 것하십시오 :
여기
pyudev
와 함께evdev
를 사용하는 예입니다? https://stackoverflow.com/questions/47262144/python-3-headless-rasppi-locale-de-de-not-possible-for-python-evdev Thanks – ddlab