Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Implementar este codigo en un GUI
#1
Hola a todos!
Tengo este codigo , el cual accede a un disco asignado, toma los primeros 512bytes "El primer sector" y lo saca por pantalla del terminal. Todo esto lo hace SOLO en modo admin ya que el acceso a disco requiere permisos.
Necesito implementar esto en mi GUI, nada de terminal. Tengo hecha la interfaz en Tkinter y necesito ejecutarlo para que ese sector me lo saque en un label.
Alguien me puede echar una mano? He pensado que generando un .bat con el codigo tal vez se ejecute y retorne el sector.. pero no se me ocurre como hacerlo.
El codigo:
Código:
import subprocess, io

def getDisk(letter): #Reconozco todas las unidades para que cuando le pase una me desglose la info
    sn = None
    sn_p = subprocess.Popen(["powershell", "-Command", "get-partition -DriveLetter {} | get-disk | select-object SerialNumber".format(letter[0])], stdout=subprocess.PIPE)
    for (i, line) in enumerate(io.TextIOWrapper(sn_p.stdout, encoding="utf-8")):
        if(i != 3):
            continue
        sn = (line.strip())
        break
    deviceId_p = subprocess.Popen(["powershell", "-Command", "Get-WmiObject MSFT_Physicaldisk -Namespace root\Microsoft\Windows\Storage -Filter \"SerialNumber='{}'\" | select-object DeviceId".format(sn)], stdout=subprocess.PIPE)
    for (i, line) in enumerate(io.TextIOWrapper(deviceId_p.stdout, encoding="utf-8")):
        if(i != 3):
            continue
        deviceId = (line.strip())
        break
   
    return "".join(["\\\.\PhysicalDrive", deviceId])

disk = getDisk("D:") # Le paso la letra de la unidad para acceder a su primer sector "importante tener privilegios"

with open(disk, 'rb') as fp: #le paso la info de la unidad y en modo lectura recorro su primer sector
    fp.seek(0)
    sector = fp.read(512) #indico el numero de bytes a extraer
    contents = []
    for _byte in sector:
        contents.append((hex(_byte))) #les paso a hexadecimal
    print(contents)

Realmente estoy muy perdido por eso acudo a vosotros, si alguno tiene tiempo y me puede ayudar lo agradecería..

Cualquier ayuda será bien recibida. Gracias!
Responder
#2
Si ejecuto el codigo en un terminal normal me devuelve esto:
PermissionError: [Errno 13] Permission denied: '\\\\.\\PhysicalDrive2'
Responder
#3
Hola, ¿cómo estás?

¿Cuál es el problema que tenés pasándolo a una interfaz gráfica? Deberías usar un botón y una etiqueta. Parece que lo central ya lo tenés resuelto.

El error de permiso está bien, si el disco necesita permisos de administrador.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#4
Hola @Francisco al final lo he solventado de otra forma ya que indicando la ruta asi \\\\.\\"+(Letra unidad) si me deja acceder a una unidad FAT. Lo que tengo ahora es un problema de visualizacion de datos, te comento:
Tengo este codigo 
                   
Código:
        with open(file,'rb') as f:
            print("Disk Open")
            f.seek(0)
            sector = f.read(512)
            # Convert the binary data to upper case hex ascii code
            for c in sector:
                hex_data = "{:#08x}".format(offset) + ": "
                hex_data += " ".join("{:02X}".format(c) for c in sector[:8])    
                hex_data += " | "
                hex_data += " ".join("{:02X}".format(c) for c in sector[8:])

file es la unidad elegida. abro los primeros 512Bytes y se los paso a sector . Ahora la idea es visualizarlo tal que asi : 0x000000: EB 3C 90 4D 53 44 4F 53 | 35 2E 30 00 02 40 04 00 , pero solo me lo hace en la primera linea.. luego me saca todo en pares F8 FA 00 3F 00 FF 00 80 00 00 00 00 etc. Y se supone que deberia ser la segunda linea 0x000010 F8 FA 00 3F 00 FF 00 80 [b]| 00 00 00 00 00 FF 00 80 ... sabes como podria hacerlo? Ahora me lo saca asi como en la imagen[Imagen: python3.8_gFzilXvfN4.jpg?width=1237&height=570]

la idea es visualizarlo asi :
[Imagen: python3.8_N2wu9jVsJC.jpg?width=1237&height=567]

[/b]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)