新しい '/etc/udev/rules.d' マッピング ファイルを作成し、udev にサブプロセス呼び出しを行ってデバイス リストを更新する Python コードをいくつか継承しました。
call(['/sbin/udevadm', 'trigger', '--action=change'])
マッピングされているデバイスを抜き差しすることなくマッピングを更新する必要があるため、トリガー呼び出しが必要です。私の問題は、「呼び出し」行がある時点で削除されたため、プログラムの他の部分で明らかでない副作用が発生したため、キャッチされなかったことです。
このような問題を修正する私の通常の方法は、このメソッド (マッピング ファイルを書き込み、トリガーを呼び出す) で単体テストをスローして、期待される動作を強制することですが、この動作は単体テストの領域外のようです。これはシステム コールです。言うまでもなく、udevadm トリガーには sudo アクセスが必要です。この場合、どのように/何をモックアウトするかわかりません。
udevの特定の動作をモックできることがわかったので、pyudevライブラリの使用を検討しましたが、トリガー動作をモックできるようには見えません(または、そのためにアクセスすることさえできません)。
「#DO NOT DELETE THIS LINE EVER!」という大きなメッセージを投げるまではありません。「call」行の上で、これが将来削除されないようにするためにここでできることはありますか? 「削除しないでください」という行は、なぜそこにあるのか誰も手がかりがない1年後など、簡単に無視されます。