Localização dos dispositivos USB montados automaticamente

1

Estou criando um aplicativo GUI usando o tkinter e o python. O aplicativo exige que um usuário conecte uma unidade flash USB contendo arquivos de vídeo. Estou lançando o aplicativo com o openbox. O USB não parece ser montado automaticamente ou está em um local diferente do que ao iniciar o aplicativo com o LXDE ( /media/pi ). Onde o dispositivo USB é montado (caminho) ou se não é como eu configuro o pi para montá-lo automaticamente ao usar o openbox?

Este é o código que estou usando para acessar o USB agora, supondo que já esteja montado.

for root, dirs, self.files in os.walk('/media/pi'):
    
por MFerrero199 08.07.2016 / 01:55

2 respostas

1

Existem algumas maneiras diferentes de automontar dispositivos de armazenamento no linux. Até mesmo a localização dos montes varia bastante. Além disso, nem todos os sistemas são configurados para dispositivos de montagem automática e alguns ambientes de área de trabalho são montados automaticamente quando você os acessa a outros quando os conecta.

Basicamente, para torná-lo portátil, você não pode confiar em pontos de montagem em um local para localizar dispositivos.

Em vez disso, você deve encontrar os dispositivos, filtrar os removíveis / os que você está interessado e, em seguida, mapeá-los para onde eles estão montados (se em todos os montados). Usando o python, você pode obter uma lista de dispositivos removíveis com pyudev e, em seguida, mapeá-los para montar pontos com 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))

Que produzirá:

% python2 partitions.py
All removable partitions: /dev/sdb1, /dev/sdb2
Mounted removable partitions:
  /dev/sdb2: /run/media/mdaffin/ARCHISO_EFI

Você pode aproveitar este futuro montando automaticamente partições que não são montadas com udisks se você quiser.

    
por 08.07.2016 / 17:46
0

if device.attributes.asstring ('removable') == "1" está causando um erro. está causando um objeto 'bool' não tem erro de atributo. Existe alguma outra maneira que eu possa escrever isso?

    
por 21.07.2016 / 03:30