
GNOME VFS es una librería para realizar todo tipo de operaciones sobre ficheros independientemente del método de acceso necesario para llegar a ellos (FTP, HTTP, WebDAV, SMB, etc). Esta receta muestra ejemplos de lo sencilla y potente que puede llegar a ser esta pequeña maravilla.
GNOME VFS intenta seguir una semántica lo más parecida posible a la de POSIX, de modo que dispone de open, read, write, seek y todas las primitivas que eran de esperar (aunque puede que en la nueva versión esto cambie bastante).
Para designar un fichero o directorio se utilizan URIs que incluyen:
Partiendo de esta base, es posible realizar gran cantidad de operaciones:
Además de cuestiones avanzadas como Zeroconf, DNS, SSL, gestión de MIMEs, etc.
En esta receta incluiré pequeños ejemplos que considere lo suficientemente simples y didácticos, así que esta receta irá creciendo con el tiempo, o eso espero.
copy universalEl siguiente programa (llamado vfs-copy.py) se puede utilizar para copiar cualquier fichero de cualquier sitio a cualquier sitio (siempre que esos sitios sean manejables por GNOME VFS obviamente):
import sys import gnomevfs as vfs if len(sys.argv) != 3: sys.exit("Usage: %s source target" % __file__) src_uri = vfs.URI(vfs.make_uri_from_shell_arg(sys.argv[1])) dst_uri = vfs.URI(vfs.make_uri_from_shell_arg(sys.argv[2])) print src_uri, '->', dst_uri vfs.xfer_uri(src_uri, dst_uri, vfs.XFER_DEFAULT, vfs.XFER_ERROR_MODE_ABORT, vfs.XFER_OVERWRITE_MODE_ABORT)
De ese listado todo es autoexplicativo excepto la función xfer_uri(). El prototipo de esa función es:
gnomevfs.xfer_uri(source_uri, target_uri, options, error_mode, overwrite_mode, progress_callback, data)
que son:
Y ahora vamos a probarlo, todos los comandos siguientes funcionan tal cual con el listado del programa anterior:
$ python vfs-copy.py /home/david/.bashrc mybashrc file:///home/david/.bashrc -> file:///home/david/devel/mybashrc $ python vfs-copy.py ftp://ftp.rediris.es/welcome.msg welcome ftp://ftp.rediris.es/welcome.msg -> file:///home/david/devel/welcome $ python vfs-copy.py http://ftp.gnu.org/pub/gnu/a2ps/a2ps-4.12.tar.gz#gzip:#tar:/a2ps-4.12/FAQ faq http://ftp.gnu.org/pub/gnu/a2ps/a2ps-4.12.tar.gz#gzip:/#tar:/a2ps-4.12/FAQ -> file:///home/david/devel/faq $ python vfs-copy.py ftp://ftp.rediris.es/welcome.msg sftp://david:miclave@miservidor.dyndns.org:/home/david/mensaje ftp://ftp.rediris.es/welcome.msg -> sftp://david:miclave@miservidor.dyndns.org:/home/david/mensaje
Comentarios
Gracias
Sólo la he leido por encima, pero me interesa mucho. Gracias por la receta!
—
PPC: int main(){long foo=1649571173;puts(&foo);}
x86: int main(){long foo=1702187618;puts(&foo);}