web-dev-qa-db-ja.com

自動マウントされたUSBデバイスの場所

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
MFerrero199

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でマウントされていないパーティションを自動マウントすることで、この未来を実現できます。

1
Michael Daffin

device.attributes.asstring( 'removable')== "1"がエラーの原因である場合。 'bool'オブジェクトの原因は属性エラーではありません。これを書く方法は他にありますか?

0
MFerrero199