https://foro.gambas-es.org/viewtopic.php?f=1&t=383&p=2166#p2166
-----------------------------------
fabianfv
Miercoles, 27 Enero 2010, 21:27

Re: Dispositivos USB En Listbox
-----------------------------------
[strike]No puedes traducir ese código Python a Gambas, no hay nada en Gambas como:[/strike]

[b]Edito[/b]: perdón Pablo, está perfecto que quieras traducir ese código Python a Gambas y es posible porque es bien sencillo (eso me pasa andar tan apurado y no leer el código, supuse que usaba alguna biblioteca de Python para obtener la lista de dispositivos USB).

[quote]
La idea seria, hacer un listado de todos los directorios del /sys/block/ para obtener lo que van a ser los dispositivos de disco como tal... filtrando para que no muestre  todos los virtuales tales como ram* o loop* o sr. solo los que sean hd* o sd*... Eso creo con un rdir("/sys/block") podria conseguirlo, pero no estoy seguro y luego eso guardarlo en una variable string para con un for volcarlos a otra variable.
[/quote]

Con RDIR o si no funciona tal vez sirva algo como:

[code linenumbers=false syntax=gambas]
DIM salida AS String
Dim arrSalida AS String[]

  'Usar alguna expresión regular que haga el filtro que deseas.
  SHELL "ls -l /sys/block|grep usb" TO salida
  arrsalida = split(salida, gb.newline)
[/code]

[quote]
Despues habria que filtrar todas esos resultados, mirando que dentro de cada carpeta obtenida (sd*/) tiene que haber un fichero llamado "removable" y si dentro de ese fichero el valor es "1", puede mostrarse ya que es un dispositivo hotplug y no un disco duro nuestro, que en el caso de ser un disco duro nuestro, deberia de ser "0" y no mostrarse en la lista. Una vez filtrado los que se puedan mostrar, habria que leer el archivo que se encuentra dentro de la carpeta devices, que se llama vendor para guardar el fabricante y el archivo model para guardar el modelo y juntar la lectura de ambos en una sola linea, de esta manera ya tendrias que corresponde al, por ejemplo, KINGSTON (fabricante) DATA TRAVELER (modelo), y ademas como ya esta el sd*, a ese sd* le añadiriamos un /dev/ delante, por lo que ya tendriamos tambien la direccion fisica (Ejemplo: /dev/sdb) Y mostrar en el listbox por ejemplo KINGSTON DATA TRAVELER y que al pinchar esa opcion, una variable llamada fisica coja el valor que le corresponda, en ese caso, /dev/sdb/.
[/quote]

Lo que yo haría en primera instancia sería utilizar EXEC para ejecutar comandos Linux bien conocidos para hacer esto (cat, ls, etc), porque me parece que escribir código Gambas sería más largo.

[quote]
No me gusta que me den las cosas hechas, pero si que me hecheis una mano, os lo agradeceria de corazon.
[/quote]

Ten la seguridad de que si no obtuviste respuestas más adecuadas es porque nadie más tuvo tiempo para responder o nadie más tuvo esta necesidad y por tanto tampoco el conocimiento sobre cómo hacerlo.

Saludos cordiales.


