我正在使用python-fuse
编写FUSE客户端。
需要编写的函数之一,模仿Python os.open()
函数,我需要测试flags参数。
通过使用按位OR来组合os.O_*常量很容易创建这样的参数。
但我无法弄清楚如何测试特定的设置。
见过
if flags | os.O_APPEND:
...
在xmp.py示例中的,无法确定是否正确。是否测试APPEND标志是否设置在标志中?忽略是否设置了其他标志?
我在尝试
if not (flags | os.O_RDONLY):
它似乎不起作用。
绝对是一个蟒蛇菜鸟。
答案 0 :(得分:1)
使用&
屏蔽进行测试:
if flags & os.O_APPEND:
|
用于组合标志,使用&
(按位AND)来测试是否设置了标志。 if flags | os.O_APPEND
行中的xmp.py
行很可能是错误,总是将成为True
。
演示:
>>> import os
>>> 0 & os.O_APPEND
0
>>> os.O_APPEND & os.O_APPEND
8
>>> (os.O_RDWR | os.O_CREAT) & os.O_APPEND
0
>>> (os.O_RDWR | os.O_CREAT | os.O_APPEND) & os.O_APPEND
8
因为数字0为假且任何其他数值为真,所以8
被视为真。
请注意,os.O_RDONLY
为0
;它相当于没有设置任何标志。您可以明确地测试它(if not flags
或if flags == os.O_RDONLY
),或者从其他标志的测试中推断它。