2016-03-01 33 views
1

我有这样代表八进制数为海峡

def _changePerms(path, perms): 
    try: 
     os.chmod(path, perms) 
     log.debug("Setting permission of file " + path + " to " + str(perms)) 
    except Exception as e: 
     raise e 

的方法,我称之为像

_changePerms(path,0o755) 

的方法,但我的输出日志打印此:

2016-03-01 18:51:41,716 Setting permission of file path to 493 

我想要以八进制形式打印数字,而不是小数形式(八进制755 ==十进制493)。

如何将值作为字符串打印?

+0

755八进制数(基数8)= 493十进制数(基数10) –

+0

因为您明确使用八进制表示法...... – deceze

+0

所以如何将八进制数转换为str? – v1shnu

回答

2

默认情况下,一个数字的字符串表示是基地10.要打印八进制数,你可以使用str.format()

perms = 0o755 
log.debug("Setting permission of file {} to {:o}".format(path, perms)) 

格式说明'o'代表“八进制格式”。

+0

是的!这是它。谢谢 :) 。你也可以解释如何:o将值更改为字符串? – v1shnu

+1

@ViChU:'{}'插入下一个参数的文本。 '{2}'插入第二个参数的文本。 '{:o}'插入下一个表示为八进制字符串的参数。您还可以指定最小宽度,浮点数的精度以及许多其他格式。见罚款文件。 –

+0

明白了!谢谢:) – v1shnu

3

在这里,我不知道为什么它打印0o755打印493

因为他们是非常相同的价值,一个八进制,一个十进制:

>>> 0o755 
493 
>>> '{:o}'.format(0o755) 
'755' 

一旦转换到一个数值,它所存储的int对象并不指示最初使用的是什么基。在这种情况下使用八进制,因为Unix文件许可方便在3位组中进行分组:每个用户拥有一个数字,用于所有者,组和其他权限(每个权限都包含读,写和执行位)。其他常见的基础包括2(二进制),16(十六进制)和64(base64 - 用于在文本协议中传输二进制数据,例如电子邮件)。

+0

感谢您解释:) – v1shnu