我对以下代码有问题
import os
print("Can I write into the tv folder?",os.access("/tv", os.W_OK))
print("Does the /tv/test file exists?", os.access("/tv/test", os.R_OK))
with open("/tv/test", "w") as f:
f.write("toto")
print("Does the /tv/test file exists now?", os.access("/tv/test", os.R_OK))
with open("/tv/test", "r") as f:
print("Content of the /tv/test file:")
print(f.read())
它打印出来了
Can I write into the tv folder? False
Does the /tv/test file exists? False
Does the /tv/test file exists now? True
Content of the /tv/test file;
toto
但是根据第一次打电话给 os.access
,我不应该写测试文件。。。
我在docker容器(docker版本20.10.7)中运行python 3.8.10,tv文件夹是docker完成的远程nfs装载。
root@7f0a44aad8a9:/# ls -la /tv
total 8
drwxrwxrwx 1 abc abc 3826 Jul 27 14:18 .
drwxr-xr-x 1 root root 4096 Jul 27 14:12 ..
drwxrwxrwx 1 abc abc 988 May 13 07:30 DARK
... (a lot of other folders)
-rwxrwxrwx 1 abc abc 4 Jul 27 14:18 test
我的docker撰写文件:
version: "3.4"
services:
bazarr:
image: ghcr.io/linuxserver/bazarr
container_name: bazarr
volumes:
- shows:/tv
ports:
- 6767:6767
dns: 1.1.1.1
restart: unless-stopped
volumes:
shows:
driver_opts:
type: "nfs"
o: "nfsvers=3,addr=xxx,soft,rw"
device: ":xxx"
我知道 os.access
可以给假阳性,但假阴性?
有人看过这个吗?
这是意料之中的事吗?
1条答案
按热度按时间vwkv1x7d1#
这与posix文件系统(包括*nix文件系统)的关系要比与python的关系大得多。
但是根据对os.access的第一次调用,我不应该能够编写测试文件。。。
不,不幸的是,这是错误的(但必须承认,这有点不直观)。
在posix文件系统中,您可能没有写入目录的权限(这是您所检查的),但这并不意味着您不能写入该目录中的文件。这意味着您不能将新文件写入所述目录。
例子:
请注意,我无法将新文件写入目录
test_dir
,但我仍然可以写信给.txt
在内部test_dir
. 在上面的示例中,您需要检查os.access("/tv/test", os.W_OK)
. 在上述示例的我的回复中:最后,请注意
os.access
是linux/unix访问的简单 Package 器:https://manpages.debian.org/buster/manpages-dev/access.2.en.html.所以不,这不是假阳性或假阴性,这只是文件系统的工作方式。