私はtkinterとPythonを使ってGUIアプリケーションを作成しています。このアプリケーションを使用するには、ユーザーがビデオファイルを含むUSBフラッシュドライブを挿入する必要があります。私はopenboxを使ってアプリケーションを起動しています。 USBが自動的にマウントされない、またはLXDE()を使用してアプリケーションを実行したときとは異なる場所にあるようです/media/pi
。 USBデバイスはどこに(パス)マウントされていますか?それ以外の場合は、openboxを使用するときに自動的にマウントするようにpiを設定するにはどうすればよいですか?
USBがすでにインストールされていると仮定し、USBにアクセスするために現在使用しているコードです。
for root, dirs, self.files in os.walk('/media/pi'):
答え1
Linuxでストレージデバイスを自動的にマウントする方法はいくつかあります。設置場所も大きく異なります。また、すべてのシステムがデバイスを自動的にマウントするように設定されているわけではなく、一部のデスクトップ環境ではそのデバイスにアクセスすると自動的にマウントされ、他のシステムは接続時に自動的にマウントされます。
デフォルトでは、ポータブルにするためにデバイスを見つけるためにどこかにあるマウントポイントに頼ることはできません。
代わりに、デバイスを探して、関心のあるリムーバブルデバイスをフィルタリングし、デバイスがインストールされている場所(インストールされている場合)にマッピングする必要があります。 Pythonを使用すると、以下を使用してリムーバブルデバイスのリストを取得し、pyudev
それをマウントポイントにマップできますpsutil
。
#!/usr/bin/env python
import pyudev
import psutil
context = pyudev.Context()
removable = [device for device in context.list_devices(subsystem='block', DEVTYPE='disk') if device.attributes.asstring('removable') == "1"]
for device in removable:
partitions = [device.device_node for device in context.list_devices(subsystem='block', DEVTYPE='partition', parent=device)]
print("All removable partitions: {}".format(", ".join(partitions)))
print("Mounted removable partitions:")
for p in psutil.disk_partitions():
if p.device in partitions:
print(" {}: {}".format(p.device, p.mountpoint))
これで以下が生成されます。
% python2 partitions.py
All removable partitions: /dev/sdb1, /dev/sdb2
Mounted removable partitions:
/dev/sdb2: /run/media/mdaffin/ARCHISO_EFI
udisks
必要に応じて、マウントされていないパーティションを自動的にマウントして、将来的にもこれを保証できます。
答え2
device.attributes.asstring('removable') == "1" の場合、エラーが発生します。 "bool"オブジェクトにプロパティエラーがありません。これを書く他の方法はありませんか?