![]() |
[Errno 18] Invalid cross-device link using os.rename
oldName=/backup/backups/data/WWW_httpd.conf_backups/20050204.httpd.conf
newName=/backup_old/data/WWW_httpd.conf_backups/20050204.httpd.conf os.rename(oldName,newName) gives: OSError: [Errno 18] Invalid cross-device link mv from the shell works fine. This is Python 2.2.3 from RedHat 9.0. Any suggestions (other than os.system('mv %s %s')?) |
Re: [Errno 18] Invalid cross-device link using os.rename
Scott Whitney wrote:
> os.rename(oldName,newName) gives: > > OSError: [Errno 18] Invalid cross-device link > > mv from the shell works fine. > > This is Python 2.2.3 from RedHat 9.0. > > Any suggestions (other than os.system('mv %s %s')?) catch exception and copy if error == errno.EXDEV. (this is what "mv" does, of course) or use shutil.move: >>> import shutil >>> help(shutil.move) Help on function move in module shutil: move(src, dst) Recursively move a file or directory to another location. If the destination is on our current filesystem, then simply use rename. Otherwise, copy src to the dst and then remove src. A lot more could be done here... A look at a mv.c shows a lot of the issues this implementation glosses over. </F> |
Re: [Errno 18] Invalid cross-device link using os.rename
mv is a surprisingly complex program, while os.rename is a wrapper
around rename(2) which is probably documented on your system to return EXDEV under these circumstanes. os.xxx is generally a fairly thin wrapper around what your OS provides, and inherits all the "gotchas". For some activities, os.shutil provides something that is between os.xxx and os.system("xxx") in complexity and capability. Jeff -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (GNU/Linux) iD8DBQFCEULWJd01MZaTXX0RAuavAKCX1bQui+R5m4q4kIZfxU q3rFoqMgCgpOQq Z+qkuXf4jsxiPGmJPMm3EOw= =uBq3 -----END PGP SIGNATURE----- |
Re: [Errno 18] Invalid cross-device link using os.rename
Thanks, Jeff. I appreciate the input. I just stuck with os.system('mv
%s %s'). Seems to work fine. On Mon, 14 Feb 2005 18:31:18 -0600, Jeff Epler <jepler@unpythonic.net> wrote: > mv is a surprisingly complex program, while os.rename is a wrapper > around rename(2) which is probably documented on your system to return > EXDEV under these circumstanes. > > os.xxx is generally a fairly thin wrapper around what your OS provides, > and inherits all the "gotchas". For some activities, os.shutil provides > something that is between os.xxx and os.system("xxx") in complexity and > capability. > > Jeff > > > |
| All times are GMT. The time now is 01:37 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.