$ cat test.py #!/usr/bin/env python import os import stat dbfile = './testfile.test' with open(dbfile, 'w') as fh: print('Opened file for writing') os.unlink(dbfile) os.mknod(dbfile, stat.S_IRUSR | stat.S_IWUSR
stat.S_IFREG) print('Mknod\'ed file') [cliff@ih ~]$ cd tmp <-- nfs mounted on a 64bit Fedora box [cliff@ih tmp]$ ~/tmp/test.py Opened file for writing Traceback (most recent call last): File "/home/cliff/tmp/test.py", line 9, in os.mknod(dbfile, stat.S_IRUSR
stat.S_IWUSR
stat.S_IFREG) OSError: [Errno 2] No such file or directory [cliff@ih tmp]$ cd /tmp <-- locally mounted on a HD [cliff@ih tmp]$ ~/tmp/test.py Opened file for writing Mknod'ed file I think the mknod() call really shouldn't fail if it tries to create an ordinary file that can be created with open() with problems.
> Well, this looks like a filesystem problem more than a Python problem. The error (errno 2) comes from the mknod() system call itself. Definitely. @Nikratio Just to be sure, could you provide the result of: - strace ~/tmp/test.py from NFS-mounted directory - the relevant line of "mount" output - "nfsstat -a" on client (and maybe server) But you should know that mknod is disabled on some NFS servers for security reasons, and see man mknod: " POSIX.1-2001 says: "The only portable use of mknod() is to create a FIFO- special file. If mode is not S_IFIFO or dev is not 0, the behavior of mknod() is unspecified." However, nowadays one should never use mknod() for this purpose; one should use mkfifo(3), a function especially defined for this purpose. Under Linux, this call cannot be used to create directories. One should make directories with mkdir(2). There are many infelicities in the protocol underlying NFS. Some of these affect mknod()." So try to avoid mknod over NFS...