hacker mũ hồng viết như sau:
bash:
$ test -x pathpython:
In [3]: os.access(path, os.X_OK)Có gì sai ở đây?
Out[3]: True
manpage của "test" viết khá chi tiết về tác dụng của nó -x:
man 1 test:
$ man test | grep -A2 -- -x-x ở bash hay os.access(path, os.X_OK) chỉ kiểm tra xem execute flag(--x) trong permission (ứng với user hiện tại) của "file" có được bật không. Nó không phân biệt đầu vào là một file bình thường hay một directory.
-x file True if file exists and is executable. True indicates only
that the execute flag is on. If file is a directory, true
indicates that file can be searched.
Sửa lại:
- đảm bảo đầu vào là 1 file bình thường (cũng có thể là 1 symlink)
Python:
In [17]: path = '/bin'Bash:
In [18]: os.access(path, os.X_OK) and os.path.isfile(path) or os.path.islink(path)
Out[18]: False
$ path='/'- hoặc đảm bảo đầu vào không phải là 1 directory.
$ test -f $path && test -x $path ; echo $?
1 # thank to +Hiep Nguyen Van
Python:
In [19]: os.access(path, os.X_OK) and not os.path.isdir(path)Bash:
Out[19]: False
$ path='/bin/cat'; test -x $path && test ! -d $path && echo $path is a executable file not a dirPS:
/bin/cat is a executable file not a dir
File permissions biểu diễn trên Python:
In [20]: os.R_OK, os.W_OK, os.X_OKHết
Out[20]: (4, 2, 1)
hvn@familug.org
bash: test -f path && test -x path
ReplyDelete