Python

如何通知程序硬體事件?

  • January 28, 2020

我正在尋找一個無限期等待事件的程序,在這種情況下,插入 USB/s 並在操作後執行一些操作。

我打算用 C 或 Python 編寫它。

問題是,如何在事件發生時通知程序(插入 USB 設備)?

其次,如果它是在 Python 中完成的,除了循環之外,還有其他資源密集型的等待事件的方法嗎?

在 Linux 上,您可以,感謝udev.

  1. 使用 辨識您的 USB 設備udevadm info -a /dev/yourdevice。請參閱編寫 udev 規則
  2. 根據您的設備資訊,創建一個 udev 規則:
SUBSYSTEM=="zzz", ATTRS{idVendor}=="xxx", ATTRS{idProduct}=="yyy",  RUN+="/usr/bin/my_signaler /dev/%k
  1. 編寫你的信號器程序(在我的 udev 規則中,它位於/usr/bin/my_sampler):
#! /bin/bash
NEW_DEVICE="$1"
TARGETS=$(pgrep program_name)
for proc in $TARGETS
do
   kill -s SIGUSR1 $proc
done
  1. 讓你的程序處理SIGUSR1
#include <stdio.h>
#include <signal.h> 
#include <unistd.h>

void wakeup(int sig) {
    printf("go check /dev" );
}

int main(void) {
   signal(SIGUSR1, wakeup);

   while (1) { 
       /* if the SIGUSR1 signal is received while sleep is waiting, sleep will return*/
       sleep(20);
   }
   return 0;
}

引用自:https://unix.stackexchange.com/questions/564506