Pregunta

Estoy tratando de hacer un simple cliente de línea de comandos para acceder a acciones a través de los enlaces de Python de Gio (sí, el requisito principal es el uso gio).

Me puede ver que la comparación con su predecesor de GNOME-VFS, que proporciona algún medio para hacer cosas autenticación (MountOperation de subclases), e incluso algunos métodos que son muy específicos para acciones de samba, como set_domain().

Pero estoy atascado con este código:

import gio

fh = gio.File("smb://server_name/")

Si ese servidor necesita autenticación, supongo que es necesaria una llamada a fh.mount_enclosing_volume(), ya que estos métodos toma un MountOperation como parámetro. El problema es que llamar a estos métodos no hace nada, y el fh.enumerate_children() lógica (para enumerar las acciones disponibles) que viene a continuación falla.

Cualquiera podría proporcionar un ejemplo práctico de cómo esto se haría con Gio?

¿Fue útil?

Solución

Los siguientes parece ser un código mínimo necesario para montar un volumen:

def mount(f):
    op = gio.MountOperation()
    op.connect('ask-password', ask_password_cb)
    f.mount_enclosing_volume(op, mount_done_cb)

def ask_password_cb(op, message, default_user, default_domain, flags):
    op.set_username(USERNAME)
    op.set_domain(DOMAIN)
    op.set_password(PASSWORD)
    op.reply(gio.MOUNT_OPERATION_HANDLED)

def mount_done_cb(obj, res):
    obj.mount_enclosing_volume_finish(res)

(Derivados de gvfs de montaje . )

Además, es posible que necesite un glib.MainLoop correr porque montaje GIO funciones son asíncronas. Ver las gvfs de montaje en código fuente para más detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top