Tkinterとpythonを使ってGUIアプリを作っています。アプリは、ユーザーがビデオファイルを含むUSBフラッシュドライブを接続するように要求します。 openboxでアプリを起動しています。 USBが自動的にマウントされていないか、LXDEでアプリを起動したときとは別の場所にあるようです(/media/pi
)。 USBデバイスはどこにマウントされていますか(パス)、またはそうでない場合は、openboxを使用するときに自動的にマウントするようにpiを構成するにはどうすればよいですか?
これは、USBがすでにマウントされていると仮定して、USBにアクセスするために使用しているコードです。
for root, dirs, self.files in os.walk('/media/pi'):
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
でマウントされていないパーティションを自動マウントすることで、この未来を実現できます。
device.attributes.asstring( 'removable')== "1"がエラーの原因である場合。 'bool'オブジェクトの原因は属性エラーではありません。これを書く方法は他にありますか?